gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:07:52 28 4
gpt4 key购买 nike

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

在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com