1

我有一个这样的类结构:

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 的所有实例都访问它们自己的父类 general 的变量 $var ,因此所有 $var 都是相互独立的。

有没有一种方法可以在父类 general 中设置变量 $var一次,然后它可以自动提供给所有作为其子类/扩展 general 的类?(因此 $b->get_val() 也输出“Apple”?!)

背景:我想在通用类中加载具有语言相关值的变量。然后这些变量应该可用于所有子类。

4

3 回答 3

1

数据不会在不同对象之间自动共享。您可以使用static静态访问的类属性,它本质上是一个全局变量。但这通常是个坏主意,因为对象提供的封装通常被认为是一件好事。

于 2012-08-26T11:59:40.173 回答
0

理想情况下,如果在您的代码中您希望对象共享公共数据,最好将它们分离到另一个对象中并在代码中使用该对象。

示例:独立于语言的数据可以进入一个单独的类,以迎合语言独立的功能。但是,如果由于某些限制您只需要使用一个类,那么唯一的选择是将它们作为该类的静态成员。

于 2012-08-26T12:22:43.383 回答
0

将 $var 声明为受保护而不是私有。私有变量只对声明它们的类可用,对子类不可用。受保护的变量可用于定义类和扩展父类的所有类。

于 2012-08-26T12:24:36.003 回答