和其他语言一样,也是通过关键字public,protected,private的限制:
public;echo "
"; echo $this->protected;echo "
"; echo $this->private;echo "
"; } } $obj = new MyClass(); echo $obj->public; // 可以 //echo $obj->protected; // 致命错误 //echo $obj->private; // 致命错误 $obj->printHello(); // 输出 Public, Protected and Private /** * 定义 MyClass2 */ class MyClass2 extends MyClass { // 对于公有和保护方法或成员,我们可以重新声明,但私有的不可以 protected $protected = 'Protected2'; //重写 function printHello() { echo "这个是MyClass2的:";echo "
"; echo $this->public;echo "
"; echo $this->protected;echo "
"; //echo $this->private;echo "
";不能访问到父类的私有属性 } } $obj2 = new MyClass2(); echo $obj2->public; // 可以 //echo $obj2->private; // 未定义 //echo $obj2->protected; // 致命错误 $obj2->printHello(); // 输出 Public, Protected2, Undefined ?>
当然通过这些访问控制符,我们也可以对函数实现同样的可访问控制:
MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass;
$myclass->MyPublic(); // 可以
$myclass->MyProtected(); // 致命错误
$myclass->MyPrivate(); //致命错误
$myclass->Foo();
/**
* 定义 MyClass2
*/
class MyClass2 extends MyClass
{
//public
function Foo2()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate(); // 致命错误
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 可以
$myclass2->Foo2();
/**
* 定义Bar
*/
class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "Bar::testPublic\n";
}
private function testPrivate() {
echo "Bar::testPrivate\n";
}
}
class Foo extends Bar
{
public function testPublic() {
echo "Foo::testPublic\n";
}
private function testPrivate() {
echo "Foo::testPrivate\n";
}
}
$myFoo = new Foo();
//通过继承来的公有方法Bar::test()
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>











