php – 修改原有的特徵 trait 可否被造訪 (public/protected/private)

<?php
trait HelloWorld {
    public function sayHello() {
        echo 'Hello World!';
    }
}

class MyClass1 {
    // 修改了特徵 HelloWorld 的 sayHello() 為保護(protected)
    use HelloWorld { sayHello as protected; }
}

class MyClass2 {
    // 使用 HelloWorld 的 sayHello(),建立一個私有(private)的別名方法叫做 myPrivateHello 
    use HelloWorld { sayHello as private myPrivateHello; }
}

因為被修改為 protected 所以不可被外部訪問

// $MyClass1 = new MyClass1;
// $MyClass1->myPrivateHello();

因為建立了私有別名,所以 sayHello() 仍然可以被訪問;myPrivateHello() 則不行。

$MyClass2 = new MyClass2;
$MyClass2->sayHello(); // 可
$MyClass2->myPrivateHello(); // 不可

 


發表迴響