我正在尝试将变量传递给类,因此__construct()
可以使用它,但是在将任何变量传递给类之前调用__construct()
。有没有办法在__construct()
之前发送变量?这是代码:
class Controller {
public $variable;
function __construct() {
echo $this->variable;
}
}
$app = new Controller;
$app->variable = 'info';
感谢您的帮助!
答案 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添加到类中,我就可以通过__construct
或init
设置此属性,只需将数据作为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();
现在你可以看到你想要的东西了;