- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用别人的类,那个人定义了一个有五个参数的函数。
在 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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!