• php 类 属性和方法的关系


      一 . 属性关系

        1 .  public属性:在类的外部和内部都可以调用  被继承能够重构

        2 .  protected属性:在类的内部可以调用外部不能可以被继承并且重构

        3 .  private属性:只有在类的内部调用 不能被继承

        4 .  static属性:类的内部和外部都能调用  内部调用方法(self::属性变量) 外部调用方法(类名::属性变量)

      二 . 方法关系

        1 . public方法:在类的外部和内部都可以调用 可以被继承

        2 . protected方法:在类的内部可以调用外部不能 可以被继承

        3 .  private方法:只有在类的内部调用 不可以被继承

        4 . static方法:外部内部都可以调用  内部调用方法($this->方法名) 外部调用发法(类名::方法名)

      三 . final 说明

        1 . final---用于类、方法前。

        2 . final类---不可被继承。

          3 . final方法---不可被覆盖。

       四 . 下面是自己写的测试demo

    <?php
    
        /**
         * DEFINE MyClass1
         * Date 2019-3-14
         * Author QQ28281633
         */
        class MyClass1
        {
            //声明一个公共的变量
            public $public = 'Public';
            //声明一个受保护的变量
            protected $protected = 'Protected';
            //声明一个私有的变量
            private $private = 'Private';
            function printAll()
            {
                echo $this->public;
                echo $this->protected;
                echo $this->private;
            }
        }
    
        //实例化对象
        $obj = new MyClass1();
        echo $obj->public;     //正常输出: Public
        echo $obj->protected;  //报错:Cannot access protected property
        echo $obj->private;    //报错:Cannot access protected property
        $obj->printAll();      //正常输出 Public Protected Private
    
        /**
         * DEFINE MyClass2
         * Date 2019-3-14
         * Author QQ28281633
         */
    
        class MyClass2 extends MyClass1{
            // 可以对 public 和 protected 进行重定义,但 private 而不能
            public $public = 'Public2';
            protected $protected = 'Protected2';
            static $a = 1;
    
            function printAll(){
                echo $this->public;
                echo $this->protected;
                echo $this->private;
            }
        }
    
        $obj2 = new MyClass2();
    
        echo $obj2->public; // 这行能被正常执行
        echo $obj2->private; // 未定义 private
        echo $obj2->protected; // 这行会产生一个致命错误
        $obj2->printAll(); // 输出 Public Protected2 和 Undefined
    
    
    
        /**
         *DEFINE MyClass3
         * 类中方法的访问控制
         */
    
        class MyClass3{
            //声明一个共有的构造函数
            public function __construct(){}
    
            //声明一个共有的方法
            public function myPublic(){
                return 'myPublic';
            }
    
            //声明一个受保护的方法
            protected function myProtected(){
                return 'myProtected';
            }
    
            //声明一个私有的方法
            private function myPrivate(){
                return 'myPrivate';
            }
    
            //检查输出所有方法
            public function printAll(){
                echo $this->myPublic();
                echo $this->myProtected();
                echo $this->myPrivate();
            }
        }
    
        $obj3 = new MyClass3;
        echo $obj3->myPublic();     //正常执行
        echo $obj3->myProtected(); //报错
        echo $obj3->myPrivate();  //报错
        $obj3->printAll(); //三个方法在类的内部均可正常执行
    
    
        class Tests
        {
            public function test() {
                $this->testPrivate();
                $this->testPublic();
                $this->testStatic();
            }
    
            public function testPublic() {
                echo "1";
            }
    
            private function testPrivate() {
                echo "2";
            }
    
            public static function testStatic(){
                echo 3;
            }
        }
    
        $myFoo = new Tests();
        Tests::testStatic();
        $myFoo->test();
    
        /**
         * Class Math
         *  final 解释
         */
        class Math
        {
            public final function max(){
               echo 1;
            }
        }
        //声明类SuperMath 继承自 Math类
        class SuperMath extends Math
        {
            public final function max(){
                echo 2;
            }
        }
        //执行会出错,final方法不能被重写。
    
    ?>
    
    
  • 相关阅读:
    《构建之法》阅读笔记4
    《构建之法》阅读笔记3
    《构建之法》阅读笔记2
    《构建之法》阅读笔记1
    Android可折叠式菜单栏
    Material卡片式布局+下拉刷新+完整代码
    android悬浮按钮的使用
    androidStdio下载与安装以及安装过程问题解释
    html给图片划分区域添加链接
    UI进阶2-滑动菜单
  • 原文地址:https://www.cnblogs.com/vinzen/p/10534552.html
Copyright © 2020-2023  润新知