如果B类没有扩展A类但A类调用新的B类,则可以这样做
class A{ public $lang; public function __construct($lang) { $this->lang=$lang; } public function new_B(){ return new B(); } } class B{ public function __construct() { echo 'lang='.A::$lang; } } $root=new A('eng'); $root->new_B();
答案 0 :(得分:1)
你似乎在这里混淆了概念。 A的$ lang属性是一个实例级变量(因为它没有定义为静态),因此您无法像尝试那样静态访问它。如果你要将变量声明为static,那么你可以访问它,但是如果有多个A类实例改变它,它将在类级别而不是实例级别上更改。
答案 1 :(得分:1)
您要创建的所有A对象的A :: $ lang是否通用?然后将此变量设为静态。如果不是,您可以将A :: $ lang作为参数传递给B构造函数。那是
class A{
public $lang;
public function __construct($lang) {
$this->lang=$lang;
}
public function new_B(){
return new B($this->lang);
}
}
class B{
public function __construct($lang) {
echo 'lang='.$lang;
}
}
以下是使A :: $ lang静态:
class A{
public static $lang;
public function __construct($lang) {
self::$lang=$lang;
}
public function new_B(){
return new B();
}
}
class B{
public function __construct() {
echo 'lang='.A::$lang;
}
}
答案 2 :(得分:0)
像这样更改B类:
class B extends A{
public function __construct() {
echo 'lang='.$this->$lang; // you can use parent variables like this
}
}