【问题标题】:php abstract class property from another abstract class来自另一个抽象类的php抽象类属性
【发布时间】:2013-07-04 13:00:28
【问题描述】:

我正在学习面向对象的 PHP,但我认为我在做一些愚蠢的事情。

我有一个抽象的 userManager 类,我想为其分配一个 $db 属性,该属性将成为我的抽象数据库类的实例。

数据库类是:

abstract class Bdd{         
        private static $instance = null;

        public static function getInstance() {
            return self::$instance;
        }

userManager 类是:

abstract class usersManager{
        public $db = Bdd::getInstance();

我在这一行有一个错误:public $db = Bdd::getInstance();

(解析错误:语法错误,意外'(',期待','或';')

这是错的吗?

我认为我误解了抽象类,在我的情况下单例更好吗?

【问题讨论】:

    标签: php oop abstract


    【解决方案1】:

    声明类变量时不能调用方法,需要这样做

    public $db = null
    public function __construct() {
      $this->db = Bdd::getInstance();
    }
    

    唯一的问题是当你扩展这个类并且你需要创建一个构造函数时,你还需要通过parent::__construct();调用这个构造函数

    【讨论】:

    • 这似乎是合法的,但我的类是抽象的,__construct 方法没有被调用......
    • 不管它是抽象的,__construct 函数都会被调用,除非像我的回答那样,在你的子类中你已经声明了 __construct 方法,在这种情况下你需要调用父类: :___construct()
    • 我检查了文档和你的权利,但即使我做了 public function __construct() { echo 'CONSTRUCT';没有调用构造函数,我不明白为什么。调用该类的另一个方法。
    • 你能把你孩子班级的一些代码贴出来吗?你确定它扩展了父类吗?
    • 我没有子类,只有2个抽象类,必须从另一个类获取数据库实例。
    【解决方案2】:
    public $db = Bdd::getInstance(); 
    

    由于上述行而发生错误。声明变量时不能调用方法。

    【讨论】:

      【解决方案3】:

      类参数必须能够在编译时评估,而不是在运行时评估。基本上你只能预定义简单的值,比如字符串、null、int的e.c.t。

      因为Bdd:getInstance() 的结果只有在运行(即运行时)才能知道,所以它不能用作预定义值。

      您应该将参数设置为 null,然后在您的类构造函数方法中设置数据库实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多