从实例化当前类的类中获取值

时间:2014-06-16 16:49:58

标签: php class inheritance extend

如果这是一个愚蠢的问题并且我有一个大脑放屁,我真的很抱歉,这似乎是我应该知道的事情。如果我的结构类似于以下,是否有某种方法可以在$fooVar中获得Class bar。我是否需要找到一些方法将$fooVar作为参数传递,或者我可以利用哪些继承?如果可能的话,我想避免将其作为参数传递。 Class bar扩展了另一个类,如果我将t作为参数传递,我必须做一些额外的工作。

非常感谢你的帮助。

Class foo{
    $fooVar;
    $bar = new bar()
}//end foo{}
Class bar extends AnotherClass{
    echo $foo->fooVar;
}//end bar{}

1 个答案:

答案 0 :(得分:2)

首先,我想说,我只是对php有所了解,但我认为这个问题可以适用于任何其他基于OOP的语言。所以我试着为你准备一些代码。他们是我所知道的4种不同的方法。 (我想考虑一下我没有测试下面的代码片段。)

  1. 声明get-Function

  2. 在您的超类中访问$fooVar的值。这具有实现效果,可以从任何其他可以调用get函数的类访问该值 像这样:

        Class foo{
          private $fooVar;
    
          function __construct() {
            $bar = new bar();
          }
    
          function getFooVar() {
            return $fooVar;
          }
        }
        Class bar extends foo{
          function __construct() {
            private $foo = parent::getFooVar(); //init $foo on instantiation by get-function
          }
        }
    

    2。

    $fooVar声明为受保护的

    make $fooVar只能由其子类访问。

        Class foo{
          protected $fooVar;
    
          function __construct() {
            $bar = new bar();
          }
        }
        Class bar extends foo{
          function __construct() {
            private $foo = parent::$fooVar; //init $foo on instantiation by parent
          }
        }
    

    3。添加$fooVar作为参数

    到您的子类构造函数。 (我完全清楚这不是你想要的,但我在此将其作为另一种解决方案并进行澄清。)

        Class foo{
          protected $fooVar;
    
          function __construct() {
            $bar = new bar($fooVar);
          }
        }
        Class bar extends foo{
          function __construct($var) {
            private $foo = $var; //init $foo on instantiation with parameter
          }
        }
    

    4

    使$fooVar全局。

    (另一种解决方案,但没有推荐。)

    我认为你使用get函数很顺利。从最后两个案例中,我会特别反对最后一个案例。

    我真的希望这是你正在寻找的东西,它有很多帮助。