PHP 面向对象基础:封装性 private
被定义为私有的类成员则只能被其定义所在的类访问。
class MyTest
{
    // 私有属性
   private $a = 'private';
    // 私有方法
    private function printPrivate()
    {
        echo "Called private funtion" . "<br />";
    }
    // 类自身调用私有属性与方法
    public function printEverything()
    {
        echo $this->a . " | ";
        $this->printPrivate();
    }
}私有属性和方法不能被对象直接调用,但类自身可以调用
$test = new MyTest();
// 私有属性不可访问 Fatal error: Uncaught Error: Cannot access private property MyTest::$a
echo $test->a . "<br />";
// 私有属性不可获取 Fatal error: Uncaught Error: Call to private method MyTest::printPrivate()
$test->printPrivate();
// 类自身可以调用,打印出 private | Called private funtion
$test->printEverything();子类不可以调用父类私有属性和方法
class Test extends MyTest
{
    public function printProtected()
    {
        // 调用父类受私有属性和方法
        echo $this->a . " | ";
        parent::printProtected();
    }
}
$obj = new Test();
// 父类私有属性在子类中显示为未定义 Notice: Undefined property: Test::$a
// 父类私有方法不可获取 Fatal error: Uncaught Error: Call to private method MyTest::printPrivate()
$obj->printPrivate();父类也不可以调用子类私有属性与方法
class OtherTest extends MyTest
{
    public function printPrivateProperty()
    {
        // 调用子类私有属性
        $anotherTest = new AnotherTest();
        echo $anotherTest->b;
    }
    public function printPrivateMethod()
    {
        // 调用子类私有方法
        $anotherTest = new AnotherTest();
        echo $anotherTest->callPrivate();
    }
}
class AnotherTest extends OtherTest
{
    // 子类私有属性
    private $b = 'private of child';
    // 子类私有方法
    private function callPrivate()
    {
        echo 'Called private function in child class';
    }
}
$test = new OtherTest();
// 子类私有属性不可访问 Fatal error: Uncaught Error: Cannot access private property AnotherTest::$b
$test->printPrivateProperty();
// 子类私有方法不可获取 Fatal error: Uncaught Error: Call to private method AnotherTest::callPrivate()
$test->printPrivateMethod(); 
           PHP 社区 Wiki
 PHP 社区 Wiki
     
             
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: