文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP对象基础实例分析

2023-06-29 11:12

关注

这篇文章主要介绍“PHP对象基础实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP对象基础实例分析”文章能帮助大家解决问题。

PHP对象基础实例分析

面向对象基础

面向过程和面向对象区别

PHP对象基础实例分析

面向对象关键字

创建对象

<?phpclass People{}$man=new People();# 实例化类,man就是对象var_dump($man);?>    # 输出object(People)#1 (0) { }    #1表示:对象编号,与类无关,是整个脚本中对象的序号(0)表示:成员变量(属性)个数{}表示:具体成员变量信息(键值对)
类对象
<?phpclass Buyer{    # 常量声明    const BIG_NAME='BUYER';    # 常量不需要加 $    # 属性声明    # $name;    # 错误的,类内部属性必须使用访问修饰限定符    public $name;    public $money=0;        # 方法声明    function display(){        echo __CLASS__;        # 魔术常量,输出类名        # 方法内部变量属于局部变量    }}# 实例化$a = new Buyer();# 属性操作,增删改查echo $a->money;$a->money='20';$a->sex='male';unset($a->name);echo '<br>';# 方法操作$a->display();echo '<br>';var_dump($a);?>    # 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }

注意:类常量不是由对象来进行访问

访问修饰限定符

在属性或者方法前的修饰关键字,用来控制属性或者方法的访问位置

属性必须有访问修饰限定符,方法可以没有访问修饰限定符,默认就是 public

类内部对象

$this,方法内部内置的一个对象,会自动指向来调用的方法的对象

$this 存在于方法内部(仅限内部使用),所以相当于在类的结构内部

<?phpclass Article{    protected $name = 'a';    private $type = 'art';    public function get_name()    {        var_dump($this);    }}$a = new Article();var_dump($a);?>    # 输出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }

$this 代表的是对象,而 $this 所在环境为类内部的方法内部,所以 $this 对象是在类内部访问,因此所有的属性和方法,不受访问修饰限定符限制

PHP对象基础实例分析

PHP对象基础实例分析

PHP对象基础实例分析

构造方法
<?phpclass Article{    public $name='xiaoli';    private $sex="male";    public function __construct($name,$sex)    {        $this->name = $name;        $this->sex = $sex;    }}$a = new Article('xiaowang', 'famale');var_dump($a);?>
析构方法
<?phpclass Article{    protected $name = 'xiaoli';    private $sex = 'famale';    public function __destruct()    {        // TODO: Implement __destruct() method.        echo __FUNCTION__;    }}$a=new Article();# 销毁对象$a=1;unset($a);# __destructendecho 'end';?>    # 不销毁对象,php在运行结束也会释放资源# end__destruct
对象传值

定义:将保存对象的变量赋值给另外一个变量

在 PHP 中,对象的传值是引用传递:即一个对象变量赋值给另外一个变量,两个变量指向同一个对象地址,即只有一个对象

<?phpclass Article{    public $name = 'xiaoli';    public $sex = 'famale';}$a=new Article();$b=$a;var_dump($a,$b);echo '<br>';$a->name="wangxiaohu";var_dump($a,$b);echo '<br>';?>    # 输出object(Article)#1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" } object(Article)    #1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" }object(Article)    #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" } object(Article)    #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" }
范围解析操作符(类常量访问)

有两个冒号组成 “::” ,专门用于类实现类成员操作,可以实现类直接访问类成员

<?phpclass Article{    const  NAME='ocean';}echo Article::NAME;    # 常量是不能通过 Article->NAME 来进行访问的$a=new Article();echo $a::NAME;    # 范围解析操作符兼容对象,找到对象所属类最终进行访问,效率降低,灵活性提高?>

类常量是固定的,而对象的属性是不同对象不同的

PHP对象基础实例分析

静态成员

定义:使用 static 关键字修饰的类成员,表示该成员属于类访问

PHP对象基础实例分析

<?phpclass Article{    public static $name = 'hlm';    public static $type = 'art';    public static function getName()    {        return self::$name;    }}# 静态属性$a = new Article();echo Article::$name;# 静态方法echo Article::getName();?>
self关键字
<?phpclass Article{    public static function getInstance1()    {        return new self();    }    public static function getInstance2()    {        return new Article();    }}$a = Article::getInstance1();$b = Article::getInstance2();var_dump($a,$b);?>    # 输出object(Article)    #1 (0) { } object(Article)    #2 (0) { }
类加载

类的访问必须保证类在内存中已经存在,所以需要再用类之前将类所在的 PHP 文件加载到内存中

自动加载要求在声明类的时候有良好的规范

PHP对象基础实例分析

例:手动加载

PHP对象基础实例分析

Article.php

<?phpclass Article{    public function getName(){        return __METHOD__;    }}

mian.php

<?php# include 'Article.php';# 直接加载比较消耗资源,而且如果类已经在内存中存在,直接include会报错,建议判断后再加载if(!class_exists('Article')){    include 'Article.php';}$a=new Article();var_dump($a->getName());    # outputstring(16) "Article::getName"

自动加载

一个系统中,可能类文件会放到不同的路径下,因此一个完整的自动加载函数,应该要进行文件判定功能

<?phpfunction __autoload($classname){    # 形参代指 类名    #组织文件路径,假设当前路径下,有两个文件夹下都有类c和类m    $c_file = 'c/' . $classname . '.php';    if (file_exists($c_file)) {        include_once($c_file);        return true;    }     //if 语句如果只有一行不需要加 {}    //include_once 只加载一次    $m_file = 'm/' . $classname . '.php';    if (file_exists($m_file)) {        include_once($m_file);        return true;    }}$a=new Article();$b=new Article();
<?phpfunction autoload01($classname){    if(!class_exists($classname)){        $file_name=$classname.'.php';        if(file_exists($file_name)) include_once $file_name;    }}spl_autoload_register('autoload01');$a=new Article();
对象克隆

通过已有的对象复制一个新的同样的对象,但两者之间并非同一个对象

PHP对象基础实例分析

PHP对象基础实例分析

面向对象高级

面向对象三大特性

封装、继承、多态

类的封装

PHP对象基础实例分析

类的继承

inherit,子类合法拥有父类的某些权限

子类也称派生类

父类也称基类

# 父类class Human{}# 子类继承class Man extends Human{}

类的多态

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果

PHP对象基础实例分析

—PHP继承—
<?phpclass Human{    public function show(){        echo __METHOD__;    }}class Man extends Human{}$m=new Man;$m->show();

有限继承

子类在继承父类的成员时,并非继承所有内容,而是继承并使用父类部分内容

重写 Override

override,子类中定义了与父类重名的成员

PHP对象基础实例分析

parent 关键字

一种明确访问父类成员的表达方式

PHP对象基础实例分析

方法被重写后,访问调用的是子类方法,如果想要访问父类方法,可以通过在子类方法中使用 parent 来强制访问父类方法

parent 不能用于访问父类的属性(静态属性可以)

PHP 继承特点
静态延迟绑定

PHP对象基础实例分析

PHP对象基础实例分析

最终类 Final

使用 final 关键字修饰类名,表示此类不可以被继承

final 关键字还能修饰方法,表示方法不能被重写(通常此时类不会使用 final 关键字)

PHP对象基础实例分析

抽象类 Abstract

使用 abstract 关键字修饰的类,表示该类只能被继承,不能被实例化

abstract 关键字可以修饰方法,表示方法为抽象方法,抽象方法没有方法体(没有{})

抽象方法存在的类必须为抽象类

继承抽象类的类要么为抽象类,要么实现抽象类里所有的抽象方法

trait 代码复用

PHP对象基础实例分析

适用于,不同类之间有公共代码,但是类彼此关系不存在继承关系,此时可以将公共代码存储到 trait 中

trait 内部可以拥有一个类能拥有的成员属性(包括静态),成员方法(包括静态和抽象方法),但不能有类常量

trait 用来代码复用,不能被实例化,不能被继承

trait 同名

一个类中可能需要引入多个 trait ,而不同 trait 中可能出现同名

PHP对象基础实例分析

接口

Interface,专门用来规范一些共性类必须实现的方法

interface 接口名字{}

class 类名 implements 接口名字{}

PHP对象基础实例分析

接口成员

接口成员只能有两类

PHP对象基础实例分析

PHP 重载

overload,指在一个类中可以出现多个同名方法,彼此之间的参数个数和类型不一样

PHP对象基础实例分析

用来容错

属性重载

当对象访问不存在的或者权限不够的属性的时候,自动触发魔术方法让代码不出错

属性重载魔术方法

方法重载

对象或者类访问不存在或者权限不够的方法,自动触发的魔术方法让代码不出错

对象遍历

将对象中的所有属性以键值对的形式取出并进行访问

Iterator 迭代器

PHP对象基础实例分析

生成器

PHP对象基础实例分析

PHP对象基础实例分析

yield 关键字

设计模式

design pattern,是软件开发人员在软件开发过程中问题的解决方法

单例模式

singleton,是一种类的设计只会最多产生一个对象的设计思想PHP对象基础实例分析

保证资源唯一性

工厂模式

。。。。。。

命名空间

namespace,指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目能出现重名结构问题

PHP对象基础实例分析

基础语法:

namespace 关键字定义空间

命名规则

字母、数字、下划线,不能以数字开头

命名空间必须写在所有代码之前,定义了一个,之后可以定义多个

PHP对象基础实例分析

子空间

subspace,即在已有空间之上,再在内部进行空间划分

子空间直接通过 namespace+路径符号 \ 实现

非限定名称

直接访问元素本身,代表当前所属空间(当前目录)

限定名称

使用空间名+原名,代表访问当前空间子空间(当前目录子目录)

完全限定名称

从根目录(全局空间)开始访问,使用 \ 作为全局空间开始符号(根目录)

全局空间元素访问:使用完全限定名称访问

PHP对象基础实例分析

命名空间引入

PHP对象基础实例分析

关于“PHP对象基础实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯