有什么办法可以像我这样编写代码:
<?php
class BaseClass {
public $testvar;
public function __construct ($testvar) {
$this->testvar = $testvar;
}
}
class ChildClass1 extends BaseClass {
}
class ChildClass2 extends BaseClass {
}
$bc = new BaseClass('test1');
$cc1 = new ChildClass1();
$bc->testvar = 'test2';
$cc2 = new ChildClass2();
echo $cc1->testvar; // should echo 'test1'
echo $cc2->testvar; // should echo 'test2'
?>
我要问的原因是每次创建新的子类时都不必指定参数。我想这样做,所以我只需要指定一次参数(最好是在创建基类时)。
这可能吗?
答案 0 :(得分:0)
面向对象编程的关键是每个实例都有自己的参数。
但有时你只想在整个应用程序中使用一次类。像数据库控制器或路由器。然后,您可以使用静态属性和方法:
class BaseClass {
public static $testvar;
public function __construct ($testvar) {
self::$testvar = $testvar;
}
}
请注意,静态$testvar
的值在所有对象中都是相同的。你可以解决这个问题:&#34;
class BaseClass {
public $testvar;
public static $test_var;
public function __construct ($testvar = '') {
if (!empty($testvar)) {
self::$test_var = $testvar;
}
$this->testvar = self::$test_var;
}
}
class ChildClass1 extends BaseClass {
}
class ChildClass2 extends BaseClass {
}
$bc = new BaseClass('test1');
$cc1 = new ChildClass1();
echo $cc1->testvar; // should echo 'test1'
BaseClass::$test_var = 'test2';
$cc2 = new ChildClass2();
echo $cc1->testvar; // **should echo 'test1'**
echo $cc2->testvar; // should echo 'test2'