【发布时间】:2012-02-26 18:42:34
【问题描述】:
1 <?php
2 class ACL
3 {
4 var $perms = array(); //Array : Stores the permissions for the user
5 var $userID = 0; //Integer : Stores the ID of the current user
6 var $userRoles = array(); //Array : Stores the roles of the current user
7
8 function __constructor($userID = '')
9 {
10 if ($userID != '')
11 {
12 $this->userID = floatval($userID);
13 } else {
14 $this->userID = floatval($_SESSION['userID']);
15 }
16 $this->userRoles = $this->getUserRoles('ids');
17 $this->buildACL();
18 }
这是我正在学习创建登录系统的教程的一部分。我不知道我是否在这方面太久了,我的大脑被炸了,但我对用作函数 __constructor 中的参数的布尔语句感到困惑。见第 8 行。
这是教程给出的解释:
__constructor() 函数用于在我们初始化对象时 想要加载 ACL。当我们调用 new 时它会自动调用 ACL();。然后将用户的单个可选参数传递给 加载 ACL。在构造函数中,我们检查是否有用户 ID 传入。如果没有传入 ID,我们假设我们将加载 当前登录用户的 ACL;所以我们在会话中阅读 变量。或者,如果我们传入一个用户 ID,它允许 我们为非登录用户读取和编辑 ACL (对您的管理页面有用)。
问题#1...所以这个方法会在你创建一个新类后立即启动,它以布尔值作为参数。我不明白为什么您需要说明 userID = ' ' 的事实。难道你不能让它更简单并写: function __constructor($userID) { if ($userID != '') ........等等。 ETC。 ??还是他们的意思是一样的?
声明布尔值的想法对我来说从来没有意义,尤其是当您不在 IF 语句中使用它来测试它的有效性时。
编辑:我犯了一个非常奇怪的失误。对不起,忽略整个布尔值,它甚至不是布尔语句。我的错误... 12 小时的编程学习正在付出代价。
问题2:第5行的变量$userID和第8行的$userID一样吗?我想不,但我不确定。我确定第 5 行的 $userID 与第 12 行和第 15 行的 $this->userID 相同,但是第 8 行和第 10 行呢?我很困惑。如果第 8 行的变量 $userID 不为空,那么您将在第 5 行找到的 $userID 分配给第 8 行 $userID 的 floatval? 我感觉这是 2 个不同的 $userID。如果是这样,为什么这家伙不能用不同的词?哈哈
注意:我学习 PHP 还不到一周,所以这些看起来更像是基本的概念性问题。语法对我来说并不是真正的问题,而是概念。
任何帮助表示赞赏。干杯。
【问题讨论】:
-
为什么认为它是布尔值?它甚至默认为一个空字符串,那你为什么假设它是一个布尔变量呢??
-
只是一个旁注,它是
__construct()而不是__constructor()。 -
最好找一个不混合 PHP4 和 PHP5 的教程...一个好的 PHP5 教程会将“可见性”分配给 $perms、$userID 和 $userRoles,而不是简单地使用“var”
-
@Tom,谢谢。这是一个较旧的教程,但我一直在使用 __construct()。
-
@MarkBaker,感谢您指出这一点。我只是用“public”而不是“var”来养成分配“可见性”的习惯,但我肯定在寻找更新的 PHP5 教程。仍然学到很多东西。