PHP核心编程-面向对象

类的基本语法:

class 类名 {
             //类的主体
             属性;访问修饰符+变量      
             方法;访问修饰符+函数     
}

类名命名法:
1、帕斯卡命名法(大驼峰):首字母大写,后面每个单词的首字母大写
比如:UserName,PassWold(基本上是采用这种)

2、骆驼命名法:

  • 首字母小写,后面每个单词的首字母大写
  • 每个单词的首字母都小写,中间用下划线连接
    比如:userName, user_name;

3、匈牙利命名法:
变量类型+变量名
比如:iAge, fnShow, sName;


属性和方法的调用

在OOP中,要调用属性和方法,必须要先有对象

class stu{
       public $name='jim';
       public $sex='man';
}
$ stu1=new stu();
$stu2=new stu();
echo stu1->$name     //php7  的写法:stu1->name  
$stu1->aa='beilasdkf';  // 属性的增加:
unset($stu2->name);   //属性的删除

访问修饰符

  • public(公用):可以在类的内部和外部访问;
  • private(私有):只能在类的内部访问;
  • protected(受保护):在类的内部和子类中访问(继承链上)

提示:在oop中,属性一般都是私有化,通过公有的方法对私有的属性进行访问和赋值。(原因是为了过滤数据)

class stu{
    private $name='jim';
    private $sex='man';
    public function setInfo($name,$sex) {
        //过滤数据
        if($name==''){
            echo 'name is null';
            exit;
        }
        if($sex!='man'|| $sex!='women'){
            echo 'sex is error!';    
            exit;    
        }
       $this->name=$name;
       $this->sex=$sex;   
    }    
    public function getInfo() {
        echo $this->name;
        echo $this->sex;
    }     
}
$stu1=new stu();
$stu1->setInfo('dd','man');
echo $stu1->getInfo();

封装

访问修饰符的目的就是为了封装,
封装的目的就是用来有选择性的提供数据和访问!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


构造方法(构造函数)

区别于其他方法,在实例化对象的时候自动执行。用来初始化或者要自动运行一些动作。比如连接数据库!
语法:function __construct()

<?php
header('content-type:text/html;charset=utf-8');
class stu{
    private $name;
    private $sex;
    public function __construct($name,$sex) {
        $this->name=$name;
        $this->sex=$sex;     
    }   
    public function getInfo() {
       echo $this->name;
       echo $this->sex;     
    }   
}
$stu1=new stu('汤姆斯','男');      //自动调用构造函数
$stu1->getInfo();
$stu2=new stu('露西','女');        //只要实例化一次就调用一次
$stu2->getInfo();

继承

面向对象编程重要概念,子类可以继承父类所有属性和方法,但是不一定有权限调用。比如父类私有的属性和方法。

语法:class 子类名 extends 父类名

总结如下:

  • 在子类中调用父类属性和方法,通常在父类的属性和方法使用protected修饰符。
  • 调用父类的构造方法,如果子类没有构造方法,则默认使用父类构造方法。
  • parent关键字,表示父类的名字。
  • 子类给父类的构造函数传递参数: parent :: __construct(参数1,参数2,…)
  • php不允许多重继承
  • 静态成员可以被继承

this 关键字

表示对当前对象的引用,谁调用我就代表谁!表示当前对象。

class Goods{

     public function __construct(){
     
         var_dump($this);
     }
}

class BOOK extends Goods{
}
new Goods();    //  this 表示goods对象
newBook();        //  this 表示Book对象

多态

面向对象三大特性:封装,继承,多态!
多态:表示多种形态,分为方法改写和方法重载,php不支持方法重载。

子类重写了父类同名的方法

  • 子类方法名与父类方法名必须一致,
  • 原则上子类父类同名方法参数个数必须一致,也可以不一致。
  • 子类不能比父类访问权限更加严格,比如父类同名方法是public,子类不能用private;

私有属性继承和改写问题

如果子类与父类存在同名属性,如果属性是public修饰符,则子类属性将会覆盖父类同名属性(改写)
如果用private修饰,则无法被覆盖。对象中将存在两份属性。

在这里插入图片描述


方法修饰符

  • static:静态属性,静态方法

1、普通属性不实例化不分配空间,static修饰的属性和方法,只要加载类就分配空间,不需要实例化就可以访问
2、访问静态成员的方法:类名::静态成员
3、静态成员在内存中只有一份,为所有示例共享数据。
4、静态方法中不能访问普通成员,只能访问静态成员。
在这里插入图片描述
5、static::静态成员, 称为延时绑定,static表示的是一个类,具体表示什么类在运行的时候确定,表示的是当前对象所在的类。

在这里插入图片描述


self关键字:表示当前类的名称,用来解耦

在类中用self关键字,当类名更改的时候,无需做调整,降低耦合性!
注意:普通方法被self::调用会自动转成静态方法。但是属性却不能这样做,属性加载的空间不一样。方法其实也是在加载类的时候被分配空间,属性是在实例化对象的时候才分配空间哦。

在这里插入图片描述

在这里插入图片描述

- final修饰符
final 修饰的类不能被继承;
final修饰的方法不能被重写;


- abstruct修饰符

  • abstruct修饰的方法叫抽象方法,abstruct修饰的类叫抽象类
  • 如果只有方法的声明而没有方法的实现称为抽象方法
  • 如果一个类中有一个方法是抽象方法,那么这个类就是抽象类
  • 抽象类不允许实例化,必须在子类中实现了才能实例化

抽象类的作用:

  • 定义统一的方法
  • 防止实例化

在这里插入图片描述


接口(interface)

  • 如果一个类中所有方法都是抽象方法,那么这个类可以声明成接口
  • 接口是一个特殊的抽象类
  • 接口中的方法只能是public,默认也是public权限
  • 通过implements类实现接口
  • 不能通过final和abstruct修饰接口中的抽象方法
    在这里插入图片描述
  • 类不能多重继承在php中,但是接口可以多重实现。

在这里插入图片描述

  • 继承类同时实现接口
    注意:先继承类,后实现接口!
    在这里插入图片描述

类常量(const)

类(接口)中可以放属性,方法,常量
在这里插入图片描述


参数约束

在这里插入图片描述


自动加载类

在项目中:实现自动加载类的前提
1、一个文件只存放一个类;
2、文件名与类名同名; 方便自动加载类文件
3、以.class.php结尾;

第一种情况:类文件放在同一目录下

当页面执行的时候,通过PHP核心程序判断用户脚本需要哪个类,如果没有找到,会自动调用__autoload()函数,
并且会将缺少的类名传递给 __autoload()函数,我们只需要在__autoload函数中加载缺少的类即可。

在这里插入图片描述


第二种情况:类存放地址不规则,可能存在多个不同的文件夹中

需要将类映射到数组中加载

在这里插入图片描述


第三种情况:通过文件命名规则加载类

实现的前提,将所有同性质的类放到一个特定命名的文件夹中,比如lib 文件夹放的都是工具类,model中放的都是模型类,并且类的命名都加上特定后缀。

在这里插入图片描述


单例模式

一个类只能有一个对象,目的是提供效率。
实现单例模式的方法:三私一公

在这里插入图片描述
项目级别的单例模式:

在这里插入图片描述

工厂模式

传递不同的参数,获得不同的对象

在这里插入图片描述

策略模式

传递不同的参数,调用不同的策略
在这里插入图片描述
在这里插入图片描述

魔术方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值