我有类似的类结构:
class general {
private $var;
function set_val( $val ) {
$this->var = $val;
}
function get_val() {
return $this->var;
}
}
class A extends general {
function __construct( $val ) {
parent::set_val( $val );
}
....
}
class B extends general {
....
}
和相应的主脚本是这样的:
<?php
$a = new A( "Apple" );
$b = new B();
echo "A: " . $a->get_val();
echo "B: " . $b->get_val();
输出:
A: Apple
B:
现在的问题是A和B的所有实例都访问它们自己的变量$ var of parent class general,其中所有$ var彼此独立。
是否有一种方法可以在父类中设置变量$ var一般一次然后可以自动对所有类进行设置,这些是 背景:我想在通用类中加载具有语言相关值的变量。然后,这些变量应该可供所有子类使用。
答案 0 :(得分:1)
不会在不同对象之间自动共享数据。您可以使用静态访问的static
类属性,该属性本质上是一个全局变量。这通常是一个坏主意,因为对象提供的封装通常被认为是一件好事。
答案 1 :(得分:0)
理想情况下,如果在您的代码中您希望对象共享公共数据,最好将它们分离到另一个对象中并在代码中使用该对象。
示例:与语言无关的数据可以进入单独的类,该类迎合语言无关的功能。但是,如果由于某些约束只需要使用一个类,那么唯一的选择就是将它们作为类的静态成员。
答案 2 :(得分:0)
将$ var声明为protected而不是private。 私有变量仅适用于声明它们的类,而不适用于子类。 受保护的变量既可用于定义类,也可用于扩展父类的所有类。