puffbaby 发表于 2011-05-17 10:18

【求助】php访问控制

<?php
/**
* Define MyClass
*/
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
      echo $this->public;
      echo $this->protected;
      echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private


/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = 'Protected2';

    function printHello()
    {
      echo $this->public;
      echo $this->protected;
      echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 Private

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();
$myFoo->test(); // Bar::testPrivate
                // Foo::testPublic
?>
这个红色部分不是很明确

obj既然是MyClass的实例,为什么三个属性变量只有public的属性可以访问啊?
protected private的变量为什么访问不了?
页: [1]
查看完整版本: 【求助】php访问控制