加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

面向对象

发布时间:2020-12-13 20:55:13 所属栏目:PHP教程 来源:网络整理
导读:【类和对象的基本使用】 类的声明 调用 属性、方法 // 声明类 class Cat { 定义属性 public $name = '咪咪' ; $sex = null 定义方法 public function jiao() { echo '喵喵~' ; } } 实例化 $c1 = new Cat(); var_dump ( $c1 ); 调用 属性、方法 echo $c1 - na

【类和对象的基本使用】
类的声明
调用 属性、方法

    //声明类

    class Cat
    {
        定义属性
        public $name = '咪咪';
        $sex = null定义方法
        public function jiao()
        {
            echo '喵喵~';
        }
    }

    实例化
    $c1 = new Cat();
    var_dump($c1);

    调用 属性、方法
    echo $c1->name;
    jiao();

    $c1->sex = '母';
    $c1->sex;

传递赋值和引用赋值

    $a = 'abc';

    $b = $a;传递赋值
    $c = &引用赋值

    $a);abc
    $b);$c);abc

    $a = 'qq';

    qq
    qq

对象的传递赋值

     MyClass
    {
        $str = 'abc';
    }

    $a = new MyClass(); $a 存的是对象的标识符

    传递赋值 把标识符 赋值给 $b


    $str = 'abc'
    $str = 'abc'

    $a->str = '456';对象的属性改变了
    //$a $b 存的 仍是 对象标识符
    str = '456'
    str = '456'


    $a = 123int 123
    对象标识符str = '456'

对象的引用赋值

    $b = &引用赋值 把$a的引用 赋值给 $b

    str = 'abc'
    str = 'abc'

    $a->str = '123'str = '123'
    str = '123'

    int 123

【封装】
访问控制 public protected private

    $a = 'public'protected $b = 'protected'private $c = 'private';
        
         test()
        {
            类内部调用
            $this->a;public
            $this->b;protected
            $this->c;private
        }
    }


    $obj =  MyClass;
    类外  以 对象的方式调用
    $obj->a;public
    $obj->b;报错
    $obj->c;报错

    $obj->test();

构造函数:对象被实例化时调用

     __construct()
        {
            echo '调用了__construct <br>';
        }
    }

    $obj1 = new MyClass;调用了__construct
    $obj2 = new MyClass();调用了__construct

析构函数:对象被销毁时调用

     __destruct()
        {
            echo '对象被销毁了' MyClass();

    null;对象被销毁了
    unset($obj);exit('结束掉');结束掉对象被销毁了

静态属性与静态方法 static

    static $a = 'static'$b = '123123'static  func1()
        {
            echo '静态方法调用';
            echo MyClass::$aecho self::echo '<hr>';
            MyClass::func2();
            ;
            self::不可以用$this去调用
            //echo $this->$a;//Fatal error
            //$this->func2();
        }
         func2()
        {
            echo 'this is static func2';
        }
        
         func3()
        {
            echo 'this is func3'echo '静态属性'echo MyClass::echo self::func2();
            
            echo $this->a;//去调用静态属性 失败
            $this->func2();
        }
        
    }

    $b;非静态调用失败
    MyClass::func1();

     MyClass();
    对象使用-> 去调用静态属性 失败
    $obj->b;
    func1();
    $obj->func3();

常量const

    const NUM = 123;
    }


    NUM;

    MyClass::$a = 'def';

    MyClass::NUM = 456; 报错,常量一经定义不能修改

属性的重载:不可访问的属性

     Person
    {
        $name='小芳'$age=18;protected不可在外部访问

        //触发了不可访问的属性
        function __get($n)
        {
            if($n == 'age'){
                return age;
            }else{
                return '瞎问什么啊';
            }

        }
        
        function __set($n,$vecho '触发了设置不可访问的属性'.$n.'值为'.;
            $this->$n = function __isset(echo '判断一个不可访问的属性是否存在'.function __unset(echo '销毁一个不可访问的属性'.;
        }
        
    }

    $xiao =  Person();

    $xiao->age;18
    $xiao->xxx;瞎问什么啊

    $xiao->age = 11;设置不可访问的属性age值为11
    11

    isset($xiao->age);判断一个不可访问的属性是否存在age
    销毁一个不可访问的属性age
    判断一个不可访问的属性是否存在age

方法重载:不可访问的方法

     MyClass
    {
        
        protected function func(echo '这是一个不可访问的方法'echo '参数是'.function __call($name,1)">$argecho '触发了不可访问的方法'$name);方法名称  func
            $arg);参数
    //        array(2) {
    //                [0] =>
    //          string(3) "aaa"
    //                [1] =>
    //          int(123)
    //        }
        }

        echo '受保护的静态方法'function __callStatic(echo '调用了不可访问的静态方法'func2
            );
            array(4) {
    //                [0] =>
    //          int(1)
    //          [1] =>
    //          int(2)
    //          [2] =>
    //          int(3)
    //          [3] =>
    //          int(4)
    //        }
        }
    }

     MyClass();
    $obj->func('aaa',123触发了不可访问的方法

    MyClass::func2(1,2,3,4调用了不可访问的静态方法

【继承】
类的继承

     FatherClass
    {
        echo 'public func'echo 'protected func'private echo 'private func';
        }
    }


    class SonClass extends test()
        {
            $this->func1();public方法可以被继承
            $this->func2();protected方法可以被继承
            //$this->func3();//Fatal error:private方法不可以被继承
 SonClass();
    public
    //echo $obj->b;  //fatal error
    //echo $obj->c;     //Notice

    //$obj->func1();
    //$obj->func2();  //fatal error
    //$obj->func3();   //fatal error

    test();
    public func protected func

类的重写

     Father
    {
         shuo()
        {
            echo 'a a o o'class Son echo 'hello'shuo();
            parent::shuo();
        }
    }

     Son();
    $obj->shuo();hello
    $obj->test();helloa a o o

final 修饰类 则该类不能被继承

    final function test()  final 声明之后不能被重写
        {
             Father
    {
        
        echo '你好'报错

【多态】
抽象类abstract

    abstract  MyAbsClass
    {
        $name = '张三'$age;
        }
         func();
    }

    class ChildClass  func()
        {
            
        }
    }

     MyAbsClass
    {

    }

接口interface

    interface MyInterface
    {
         func();
         test();
    }

    class MyClass implements func(){
            
        }
         test(){
            class MyAbsClass  test();
    }

【条件约束和自动加载】
接口的继承

     Ainter
    {
        interface Binter  test();
    }



     Binter
    {
         test()
        {
            
        }
        
         func()
        {
            
        }
    }

判断是否属于某个类的实例

     A
    {
        class B class C  B
    {
         func()
        {
            echo 'ok'class D echo '好的'/*
    B实现了 A
    C、D继承自B
    C、D是兄弟
    */

     C();
     D();
    $arr = [1,3];

    是否属于D的实例
    function test(D )
    {
        ;
    }
    是否属于A的实例
    function test2(A ;
    }

    test($obj2);ok
    //test($obj1);//不属于D的实例
    test2($obj1);ok
    test2(ok

自动加载__autoload

    function __autoload(include 'myclassfolder/'.$a.'.class.php';
    }

    class A  B
    {
        
    }

注册自动装载函数

    function myloader(
    有三个参数
    参数1:需要注册的自动装载函数
    参数2: 如果没有找到参数1的函数 是否抛出异常错误
    参数3: 是否把参数1的函数添加到队列之首
    */
    spl_autoload_register('myloader',true,1)">true B
    {
        
    }

注册自动装载类

     MyLoader
    {
        function l(;
        }
    }
    ['MyLoader','l']
    //spl_autoload_register 第一个参数以数组方式传入
    spl_autoload_register(['MyLoader','l'],1)"> B
    {
        
    }

初始化时自动装载

     init(){
            $this,1)">);
        }
    }

     MyLoader();
    init();
     B
    {
        
    }

【命名空间】
命名空间(函数案例)

    namespace A;
    function time(){
        echo 'my time function <br>';
    }


    namespace B;
    echo 'my space B time function <br>'time(); namespace B time()
    A namespace A time()
    B namespace B time()
    echo time();     全局空间

命名空间(类案例)

    namespace AB;
    echo '空间AB 中的类 实例化了 <br>';
        }
    }

    namespace A;
    echo '空间A 中的类 实例化了 <br>' 非限定名称
    new ABMyClass(); 完全限定名称
    new AMyClass();new BMyClass();限定名称

打印当前命名空间

    echo __NAMESPACE__;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读