php - 如何使用具有定义为第三个非可选参数的函数

标签 php variables function optional-arguments

我正在使用别人的类,那个人定义了一个有五个参数的函数。

在 Sentry.php 中:

function checkLogin($user = '',$pass = '',$group = 10,$goodRedirect = '',$badRedirect = '')

如果所有五个字段都已填写,这将导致登录过程。

现在在他解释如何使用它的页面上有一个片段,根据 php.net,该片段没有意义。

在加载哨兵的页面中:

require_once('../system/Sentry.php');
$theSentry = new Sentry();
if(!$theSentry->checkLogin(2)){ header("Location: login.php"); die(); }

默认情况下,它会检查 $group 参数是否 <= 10(默认值)。在这种情况下,它应该是两个。如果选中的用户有 <=2 的组变量,这应该允许此人查看页面。

但是,这是行不通的,原因很明显:php 手册指出:

Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected.

所以根据 phpbuilder.com 的代码应该没有可选的 ($variable = default_something) 字段来填充对函数的调用,它绝对不应该被定义为第三个五个参数。

如何使用这样的功能?:

checkLogin(2)

最佳答案

默认参数是 PHP 处理缺少重载函数的方法。在 Java 中你可以这样写:

public void login(String username)
public void login(String username, String password)

在 PHP 中你必须这样解决它:

function login($username, $password = '')

这样 $username 是必需的,$password 是可选的。虽然这可能很方便,但并非总是如此。在您的示例中,有一个参数日志,它们都是可选的。一个干净的解决方案是制作 1 个函数来完成工作并添加“方便”方法以使界面更清晰。

所以添加:

function checkLoginGroup($group = 10) {
  $this->checkLogin('', '', $group);
}

它只是调用已经存在的函数,但它允许更简洁的接口(interface),只需调用:

$theSentry->checkLoginGroup(2);

将提供的方法设为私有(private)(或 protected ,具体取决于您的需要)并创建公共(public)“便利”方法,这样您就可以隐藏实现细节,这样会更整洁。

但是,如果您不能或不想更改原始类,您可以创建一个子类。

关于php - 如何使用具有定义为第三个非可选参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241888/

相关文章:

C++:指向结构中成员函数的指针

c - 制作一个函数来更新二维数组井字游戏表的 Action

java - Oracle 11g - 如何调用内部带有 DML 的函数?

javascript - 如何使用 jQuery 将 span 标签添加到选定的文本并将更改永久保存在本地 html 文件中?

php mysql更新不存在的记录

php - 是否可以在 php 中传递像 myfunction($var1 ="hi") 这样的变量?

javascript - 如何在局部范围内重新定义对象变量

php - 已弃用 : strpos(): Non-string needles will be interpreted as strings in the future

php - move_uploaded 文件 :failed to open stream: Permission denied in/srv/http/upload. php

javascript - 如何禁止使用开发人员工具更改变量