2014-01-11 19 views
1

我想知道为什么下面的代码不会打印出任何东西。我试图从父类中的方法访问Bar::$some_var。其中Bar::$some_var在其构造函数中定义。试图了解PHP OOP

我试过self::$some_varstatic::$some_varFoo::hello()但都没有工作。我必须做$some_varstatic

class Foo { 

    private $some_var; 

    public function __construct() { 
     $this->some_var = 5; 
    } 

    public function hello() { 
     print $this->some_var; 
    } 
} 

class Bar extends Foo { 

    public function __construct() { 
     $this->some_var = 10; 
    } 
} 

$bar = new Bar(); 
$bar->hello(); 

在此先感谢。

+1

这应该有助于http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php – elclanrs

+0

仅供参考,静态结构是不是面向对象的一部分范例。另外,这个问题与OOP无关。这是关于学习语言的语法。 –

回答

5

private使成员变量在类之外不可用。您需要使用protected来允许扩展类访问该变量。

protected $some_var; 

Visibility

+0

啊!我知道我有一些关于OOP的信息。 – phpete

+0

另外,PHP使用'::'来反驳'static'方法和变量。对于你应该使用''>''的对象。例子:'$ foo-> bar()''从'$ foo'实例化的类中调用'public function bar()'时,'foo :: bar()'调用'public static function bar – jgabriel

1

你的类变量不能是私有的,如果你想你的子类来访问它。 尝试保护,而应该工作!

0
  • ::运算符用于访问类项(常量,静态 变量,静态方法)
  • - >运算符用来访问对象的项目(非静态属性和方法)

无论如何,在你的代码中,问题是$ some_var的可见性。它是几乎保护,公众也将工作