【问题标题】:need help understanding the declaration of class properties需要帮助理解类属性的声明
【发布时间】:2010-12-27 14:56:12
【问题描述】:

我正在关注 ACL 啧啧。其中使用了这段代码。

class ACL
{
    var $perms = array();
    var $userID = 0;
    var $userRoles = array();

    function __constructor($userID = '')
    {

    }
}

但是我无法理解上面的一些声明。

a) 类属性在上面的类中是用var关键字声明的,在数据​​封装中,我们在属性声明之前不需要使用public、private或protected关键字吗?上述方法适用于 PHP4 吗?或者它也适用于php5?

b) 我的 IDE(恐慌尾声)。将 __construct 作为构造函数的正确语法。上面的代码使用了 __constructor 。哪一个是正确的?据我所知,在 PHP4 中,构造函数名称应该与类名相同,如果是这种情况,那么 __construct 和 __constructor 是否在 PHP5 中是一样的?

谢谢

【问题讨论】:

  • 您可以继续使用var。它相当于public,因此重写毫无意义。

标签: php oop


【解决方案1】:

a) var 关键字确实可能是为了与 PHP 4 兼容。 var 等同于 PHP 5 的 public。它也可以在 PHP 5 中工作,但鉴于 PHP 4 的时代已经过去,继续使用 publicprivateprotected 是安全的。

b) __construct 或 PHP 4 兼容声明的类名是唯一正确的方法。 __constructor() 不会声明构造方法。

【讨论】:

  • 教程代码混合了 PHP/4 和 PHP/5 面向对象的语法。那种失去它作为学习资源的资格:)
【解决方案2】:

在 PHP4 中,所有成员和方法都是静态的和公共的。 var 绝对是 PHP4 语法。在 PHP5 中,您应该使用 publicprivateprotected

__construct() 是构造函数的正确方法名称。由于与类同名的 PHP 5.3 方法不再被视为构造函数 - 它只是一个常规方法。

您绝对应该找到最新的教程。

【讨论】:

    【解决方案3】:

    这个示例类混合了 PHP4 和 PHP5。

    • 变量声明使用 PHP4 语法,PHP5 也 100% OK。
      • 在 PHP5 中,您可以将成员变量声明为 privatepublicprotected
      • 即使是 PHP5 函数也可以是 privatepublicprotected
      • 但这些访问器类型与 PHP4 不兼容。
    • 类构造器使用了PHP5语法,但与PHP4不兼容。

    由于您是学习者,请务必遵守 PHP 的命名约定,使用类名命名包含类的脚本文件。并且不要在同一个脚本文件中使用多个类。所有 PHP 文件必须以扩展名 .php 结尾以确保安全。

    您还可以在类中拥有静态方法(不要在同一个类中混合使用静态和动态方法),并且可以在不创建 Http::DoPost(...) 等对象的情况下调用它们。但是$this 不能在静态方法中使用。

    【讨论】:

    • 想详细说明命名约定?你指的是哪一部分?
    • 变量和类名约定,例如Acl为类名; $userId 而不是 $userID。此外,当您是学习者时,很容易习惯任何语言的编码约定。
    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 2012-10-14
    • 2021-07-03
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多