为了账号安全,请及时绑定邮箱和手机立即绑定

PHP-面向对象

难度初级
时长 2小时30分
学习人数
综合评分9.50
54人评价 查看评价
9.7 内容实用
9.8 简洁易懂
9.0 逻辑清晰
  • <!--此处有图片-->

    面向对象编程 可使项目模块化

    重用性:设计的每一个模块都可在项目中重复使用

    灵活性:每一个模块都可以很轻松地被替换

    扩展性:在现有的模块上添加新功能

        面向对象:项目由一个个对象组建而成,每个对象都是独立的,他们各司其职,最后像搭积木一样,将各种组合起来,就实现了一个项目。

  • <!--此处有图片-->

    魔术方法:

    __set 有两个参数  __set(属性名,属性值) 修改私有属性

    __get 有一个参数  __get(属性名) 查看私有属性

    __isset 有一个参数  __isset(判断的属性名) 用于检测私有属性是否存在

    __unset 有一个参数  __isset(删除的属性名) 用于删除私有属性

    __call 有两个参数  __call(函数名,函数值) 如果class内没有这个函数,则执行这个[不会因为没有函数方法报错]

    __callStatic 有两个参数  __call(函数名,函数值) 【静态static】如果class内没有这个函数,则执行这个[不会因为没有函数方法报错]

    __invoke     当类被当作函数使用  就会自动调用这个魔术方法

    __toStrgin   如果打印对象变量方法的话,会自动调用 当作字符串输出

  • 单例模式: 每个类只能被实例化一次。因为每实例化就会占用内存空间,这样可以节省空间 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 主要解决:一个全局使用的类频繁地创建与销毁。 何时使用:当您想控制实例数目,节省系统资源的时候。 工厂模式: 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决:主要解决接口选择的问题。 何时使用:我们明确地计划不同条件下创建不同实例时。 如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。 关键代码:创建过程在其子类执行。
  •   在php中继承的特点是只支持单继承,即一个子类只能继承一个父类, 去获得父类中的方法。但从php5.4开始有trait概念,一个类可以通过use关键字引入多个trait的方法,用trait解决了单继承的问题。

    03:48
    看视频
  • 在实例化一个对象的时候,通常需要初始化。 对象被销毁的时候,需要有回收。所以就用到了类里面的两个内置的方法:构造方法和析构方法。

    构造方法:

    <?php
    class Computer{
        public function __construct()   //内置的构造方法,不用调用直接就会执行
        {
            echo "cpu就绪。。";
            echo "主板就绪。。";
            echo "内存就绪。。";
         }
         public function game()
         {
             echo "---玩游戏---";
          }
    }
    $computer = new Computer();
    $computer->game();  //结果为:cpu就绪。。主板就绪。。内存就绪。。---玩游戏---
    <?php
    class Computer{
        public function __construct($high = 0)   
        {
            if($high){
                echo "高配的cpu就绪。。";
                echo "高配的主板就绪。。";
                echo "高配的内存就绪。。";
             }else{
                echo "cpu就绪。。";
                echo "主板就绪。。";
                echo "内存就绪。。";
             }
         }
         public function game()
         {
             echo "---玩游戏---";
          }
    }
    $computer = new Computer(1);   // 1这个参数就是构造方法的参数
    $computer->game();  //结果为:高配的cpu就绪。。高配的主板就绪。。高配的内存就绪。。---玩游戏---

    析构方法:

    <?php
    class Computer{
        public function game()
        {
            echo "---玩游戏---";
         }
         public function __destruct()    //是析构方法,直接可执行
         {  
              echo "关闭电源。。。";
          }
    }
    $computer = new Computer();
    $computer->game();   //结果为:---玩游戏---关闭电源。。。
    //还可以这样 手动释放对象变量
    unset($computer);
    echo "good job";    //结果为:---玩游戏---关闭电源。。。good job


    类常量:

    <?php
    class Computer
    {
        const YES = ture;     //const关键字定义类常量,类常量一般是大写字母和下划线组成
        const NO = false;
        const ONE = 1;
        
        const TWO = self::ONE + 1;    //在类里用self调用类里的常量
        const THREE = self::TWO + 1;
    }
    var_dump(Computer::THREE);  //在类外面可直接调用类里的常量,结果为:int(3)


  • 对象是类的实例,先有类,才有对象。就像配置单和电脑的关系。

    类是一个代码模板         <!--此处有图片-->

    //定义一个类
    <?php           //类名以字母或下划线开头,后面可跟字母、数字、下划线。
    class Computer {      //类名一般开头的字母大写,为了清晰。当然也可以用小写。
    }
    $computer = new Computer();  //这个对象赋给了这个变量,这个对象叫做Computer类的一个实例。
    var_dump($computer);   //打印出:object(Computer)#1(0){}

    <!--此处有图片-->                  <!--此处有图片-->

    <?php
    class Computer {     
        public $cpu = 'amd 5000';     //属性     
        public $mainboard = '华硕9000x';  //属性     
        private $hd = 1024;         //属性  
                
        public function game($gameName='')    //方法     
        {                
           echo $this->hd;    //要在类里面调用属性,就用this 可以理解为这个类的一个实例(对象)     
         }                  //打印出:1024     
         public function job($work='写代码')   //方法     
         {           
               echo ($this->game());         
          }
     }
     $computer = new Computer();
     var_dump($computer);    //打印出所有的属性:object(Computer)#1 (3) { ["cpu"]=> string(8) "amd 5000"["mainboard"]=> string(11) "华硕9000x" ["hd":"Computer" :private]=>int(1024)}
     var_dump($computer->cpu);   //调用属性 打印出:string(8)"amd 5000"
     var_dump($computer->hd);  //是私有的,不能给外部对象调用  打印出错  ,只能在类的内部使用。
     ?>
     
     <?php
     class Computer {
        public $cpu = 'amd 5000';      //属性  
        public $mainboard = '华硕9000x';  //属性     
        private $hd = 512;         //属性          
        public function game($gameName='')    //方法     
        {                
            if($this->getHdSize() < 1024){      
               echo "硬盘太小玩不了游戏";  
               return false;          
             }             
             return true;        
          }              
          public function job($work='写代码')   //方法     
          {      
              echo ($this->game());  //整个的结果就是打印出:硬盘太小玩不了游戏     
           }     
           public function getHdSize()       //方法     
           {        
                return $this->hd;   //获取硬盘大小     
            }
    }
    $computer = new Computer();


  • 1、类常量:const

    2、调用类常量:self::

    3、$this是对象

    4、self是类本身

  • 有两个下划线“__”表示php内置的函数

  • 当子类方法与父类同名,子类是会覆盖父类的方法。

    当子类没有构造方法时,会去调用父类的构造方法,当子类有自己的构造方法,就会调用自己的构造方法。

  • 方法与属性使用static定义后则改属性与方法则属于该类的

    当在静态的方法中无法通过$this调用非静态的属性因为$this指的是这个类的实例即是对象而static的方法是属于类的而不是对象的。

  • 抽象类中定义的方法可以实现,也可以不实现。

  • 对象调用用$this 类调用用self::
    00:30
    看视频
  • 重用性,灵活性,扩展性
    01:25
    看视频
  • 父类有构造方法  子类没有构造方法  那么当实例化子类时会自动调用父类的构造方法

    如果子类自己有构造方法  子类就会调用自己的构造方法 而不会去调用父类的构造方法 若还想调用父类的构造方法  应使用 parent::__construct();

    如果在类前面加final关键字  final class Dad{  } 则该类不能被继承

    如果在方法前面加 final关键字  则  此方法 在子类中 不能被重写 


  • php自动加载方法 spl_autoload_register('外部方法名') spl_autoload_register(function($className){ require $className.'.php'; }) spl_autoload_register([new 类名,'类名里的方法'])
首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
学习该课程需要熟悉PHP语法基础,了解PHP的基本使用
老师告诉你能学到什么?
1 对象的基本概念 2 什么是面向对象思想 3 面向对象的特性和规则 4 如何使用面向对象

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!