【问题标题】:How to pass variables between classes in PHP without extending如何在 PHP 中的类之间传递变量而不扩展
【发布时间】:2011-10-03 03:44:46
【问题描述】:

所以,我的设置是这样的:

class System extends mysqli{

    function __construct(){
         //user variables such as $this->username are returned here
    }

}

$sys = new System();

class Design{

    function setting(){
        echo $sys->username;
    }

}

$design = new Design();

然而 Design 类并没有回显用户名。我可以在设计类之外回显用户名,但不能在设计类内部。我该怎么办?

【问题讨论】:

    标签: php oop class variables extend


    【解决方案1】:

    其他人的回答都很好,但是你可以很好的注入对系统的依赖:

    class Design{
    
        private $sys;
    
        public function __construct(System $sys) {
           $this->sys = $sys;
        }
    
        function setting(){
            echo $this->sys->username;
        }
    }
    $sys = new System;
    $design = new Design($sys);
    

    【讨论】:

    • 嗯,它仍然不适合我。我没有得到任何变量,并且 System 类中的变量设置为 public。
    • 抱歉,我想我找到了问题所在。非常感谢:D
    【解决方案2】:

    您的Design 类无权访问$sys 变量。

    你必须这样做:

    class System extends mysqli{
    
        function __construct(){
             //user variables such as $this->username are returned here
        }
    
    }
    
    class Design{
    
        private $sys;
    
        function __construct(){
            $this->sys = new System();
        }
    
        function setting(){
            echo $this->sys->username;
        }
    
    }
    
    $design = new Design();
    

    【讨论】:

    • 这最初是我尝试过的,但由于某些奇怪的原因它不起作用。
    【解决方案3】:

    那是因为$sys 不在 Design 类的范围内。

    function setting(){
        $sys = new System();
        $sys->username;
    }
    

    应该可以工作,假设 username 是公开的。

    【讨论】:

    • +1 我不认为您的答案与使用全局变量一样糟糕。我赞成它,因此它不会被视为具有相同的价值。
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2021-01-23
    相关资源
    最近更新 更多