有一个变量可用于类__construct()

时间:2010-02-15 16:24:56

标签: php oop class variables

我正在尝试将变量传递给类,因此__construct()可以使用它,但是在将任何变量传递给类之前调用​​__construct()。有没有办法在__construct()之前发送变量?这是代码:

class Controller {
public $variable;

function __construct() {
    echo $this->variable;
}

}

$app = new Controller;
$app->variable = 'info';

感谢您的帮助!

5 个答案:

答案 0 :(得分:4)

构造函数可以获取参数,您可以初始化属性...

class Controller {
    public $variable = 23;

    function constructor($othervar) {
        echo $this->variable;
        echo $othervar;
    }
}

$app = new controller(42);

打印2342.查看PHP文档。 http://php.net/manual/en/language.oop5.decon.php

答案 1 :(得分:2)

将变量作为参数传递给构造函数

function __construct($var) {
    $this->variable = $var;
    echo $this->variable;
}
//...
$app new Controller('info');

或者将构造函数完成的工作放在不同的函数中。

答案 2 :(得分:1)

您需要将参数参数添加到构造函数定义中。

    class TheExampleClass {
       public function __construct($arg1){
          //use $arg1 here
       }
    ..
    }

..

$MyObject = new TheExampleClass('My value passed in for constructor');

答案 3 :(得分:1)

+1 Yacoby的一般答案。至于他将逻辑转移到另一种方法的暗示,我喜欢做类似以下的事情:

class MyClass
{
    protected $_initialized = false;

    public function construct($data = null)
    {
        if(null !== $data)
        {
            $this->init($data);
        }
    }

    public function init(array $data)
    {
         foreach($data as $property => $value)
         {
              $method = "set$property";
              if(method_exists($this, $method)
              {
                   $this->$method($value);
              }

              $this->_initialized = true;
          }

          return $this;
    }

    public function isInitialized()
    {
         return $this->_initialized;
    }
}

现在只需将一个setMyPropertyMEthod添加到类中,我就可以通过__constructinit设置此属性,只需将数据作为array('myProperty' => 'myValue')之类的数组传递即可。如果对象已经使用isInitialized方法“初始化”,我可以从外部逻辑轻松测试。现在,您可以做的另一件事是添加需要设置和过滤的“必需”属性列表,以确保在初始化或构建期间设置这些属性。它还为您提供了一种在给定时间设置一大堆选项的简便方法,只需拨打init(或setOptions,如果您愿意)。

答案 4 :(得分:1)

class Controller {
    public $variable;

    function __construct() {
        echo $this->variable;
    }
}

$app = new Controller;
$app->variable = 'info';

在构造之后将'info'分配给变量, 所以构造函数输出什么, 所以你必须在运行echo之前分配;

class Controller {
    public $variable;
    function __construct() {
        $this->variable = "info";
        echo $this->variable;
    }
}

$app = new Controller();

现在你可以看到你想要的东西了;