首頁 >後端開發 >php教程 >php :類別中成員的存取控制

php :類別中成員的存取控制

黄舟
黄舟原創
2017-07-02 10:56:472686瀏覽

存取控制

屬性或方法的存取控制,是透過在前面新增關鍵字 public、protected 或 private 來實現的。

由public 所定義的類別成員可以在任何地方被存取;

由protected 所定義的類別成員則可以被其所在類別的子類別和父類別存取(當然,該成員所在的類別也可以存取);而由private 定義的類別成員則只能被其所在類別存取。

 

在PHP5中支援以下3種存取修飾符。 

(1)public。此修飾符是預設的,如果未對屬性或方法指定存取修飾符,它將 

是public。共有的屬性或方法可以在類別的內部和外部進行存取。 

(2)private。此修飾符表示被標記的屬性或方法只能夠在類別的內部進行存取。不可以被繼承! 

(3)protected。此修飾符表示被標記的屬性或方法只能在類別的內部存取。可以被繼

private同一個類別可以訪問,子類別和外部類別都不能存取;

protected同一個類別和子類別可以訪問,外部類別不能存取。

對類別成員的存取控制

類別成員都必須使用關鍵字public、protected 或private 進行定義

<?php
class MyClass
{
    public $public = &#39;Public&#39;;
    protected $protected = &#39;Protected&#39;;
    private $private = &#39;Private&#39;;
    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
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = &#39;Protected2&#39;;
    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
?>

 

對方法的存取控制

類別中的方法都必須使用關鍵字public、protected 或private 來定義。如果沒有設定這些關鍵字,則該方法會被設定成預設的 public。

<?php

class MyClass
{
    // 构造函数必须是 public
    public function construct() { }

    // 声明一个 public 的方法
    public function MyPublic() { }

    // 声明一个 protected 的方法
    protected function MyProtected() { }

    // 声明一个 private 的方法
    private function MyPrivate() { }

    // 这个方法也是 public 的
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // Public、Protected 和 Private 都被调用了



class MyClass2 extends MyClass
{
    // This is public
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // Public 和 Protected 都被调用了,但 Private 不会被调用
?>

以上是php :類別中成員的存取控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn