xad*_*ict 3 php variables function optional-arguments
我正在使用elses class,而且这个人定义了一个带有五个参数的函数.
在Sentry.php中:
function checkLogin($user = '',$pass = '',$group = 10,$goodRedirect = '',$badRedirect = '')
Run Code Online (Sandbox Code Playgroud)
如果填写了所有五个字段,则会导致登录过程.
现在在他解释如何使用它的页面上有一个片段,根据php.net,没有意义.
在加载哨兵的页面中:
require_once('../system/Sentry.php');
$theSentry = new Sentry();
if(!$theSentry->checkLogin(2)){ header("Location: login.php"); die(); }
Run Code Online (Sandbox Code Playgroud)
默认情况下,它应该表现为检查$ group参数是否<= 10(默认值).在这种情况下应该是两个.如果用户选中的组变量<= 2,则应该允许此人查看页面.
但是,这不起作用,并且有一个非常明显的原因:php手册指出:
请注意,使用默认参数时,任何默认值都应位于任何非默认参数的右侧; 否则,事情将无法按预期工作.
所以代码,根据phpbuilder.com应该没有可选的($variable = default_something)字段来填充函数的调用,它绝对不应该被定义为五个参数中的第三个.
我该如何使用这样的功能?:
checkLogin(2)
Run Code Online (Sandbox Code Playgroud)
默认参数是PHP处理缺少重载函数的方法.在Java中,您可以这样写:
public void login(String username)
public void login(String username, String password)
Run Code Online (Sandbox Code Playgroud)
在PHP中你必须像这样解决它:
function login($username, $password = '')
Run Code Online (Sandbox Code Playgroud)
这样$ username是必需的,$ password是可选的.虽然这可能很方便,但并非总是如此.在您的示例中,有一个参数日志,它们都是可选的.一个干净的解决方案是使1个功能完成工作并添加"方便"方法,使界面更清洁.
所以添加:
function checkLoginGroup($group = 10) {
$this->checkLogin('', '', $group);
}
Run Code Online (Sandbox Code Playgroud)
它只是调用已经存在的函数,但它允许更简洁的接口,只需调用:
$theSentry->checkLoginGroup(2);
Run Code Online (Sandbox Code Playgroud)
将提供的方法设为私有(或根据您的需要进行保护)并创建公共"方便"方法甚至更加简洁,以便您可以隐藏实现细节.
但是,如果您不能或不想更改原始类,则可以创建子类.