zoukankan      html  css  js  c++  java
  • PHP新手之学习类与对象(3)

    四、访问控制

    对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。

    1、对类成员的访问控制

    类成员都必须使用关键字public、protected 或 private 进行定义

    Example#1 声明类成员

    <?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
    ";
        } 
    
        private function testPrivate() {
            echo "Bar::testPrivate
    ";
        } 
    } 
    
    class Foo extends Bar {
        public function testPublic() {
            echo "Foo::testPublic
    ";
        } 
    
        private function testPrivate() {
            echo "Foo::testPrivate
    ";
        } 
    } 
    $myFoo = new foo();
    $myFoo -> test(); // Bar::testPrivate 
    // Foo::testPublic
    ?>

    Note: 为了兼容性考虑,在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍然有效(只是作为 public 关键字的一个别名)。在 PHP 5.1.3 之前的版本,该语法会产生一个 E_STRICT 警告。

    2、对方法的访问控制

    类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。

    Example#2 声明类中的方法

    <?php
    /**
     * Define MyClass
     */
    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 都被调用了
    
    /**
     * Define MyClass2
     */
    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 不会被调用
    
    ?>
  • 相关阅读:
    Spark算子--join
    Spark算子--filter
    Spark算子--reduceByKey
    Spark算子--mapPartitions和mapPartitionsWithIndex
    Spark算子--map和flatMap
    Flume环境搭建_五种案例
    枚举深入剖析
    Oracle_基本函数查询综合
    Oracle_复杂查询综合
    softmax 杂谈
  • 原文地址:https://www.cnblogs.com/qingsong/p/5351107.html
Copyright © 2011-2022 走看看