本篇文章给大家带来了关于php中的相关知识,其中主要介绍了面向对象的相关问题,面向对象编程的本质是增加数据和功能的操作主体即对象,希望对大家有帮助。
推荐学习:《PHP教程》
实践学习php,thinkphp,Redis,vue,uni-app等技术,推荐开源电商系统likeshop,可以借鉴思路,可去版权免费商用,gitee下载地址:
点击进项目地址
面向对象:OOP(objected oriented programming)编程
面向过程是一种编程思想
面向对象编程的本质是增加数据和功能的操作主体,即对象
面向对象中的所有的数据和功能多是由主体(对象)来调用和操作
面向过程和面向对象区别
创建对象
# 输出object(People)#1 (0) { } #1表示:对象编号,与类无关,是整个脚本中对象的序号(0)表示:成员变量(属性)个数{}表示:具体成员变量信息(键值对)
money;$a->money='20';$a->sex='male';unset($a->name);echo '
';# 方法操作$a->display();echo '
';var_dump($a);?> # 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }
注意:类常量不是由对象来进行访问
在属性或者方法前的修饰关键字,用来控制属性或者方法的访问位置
属性必须有访问修饰限定符,方法可以没有访问修饰限定符,默认就是 public
$this,方法内部内置的一个对象,会自动指向来调用的方法的对象
$this 存在于方法内部(仅限内部使用),所以相当于在类的结构内部
# 输出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }
$this 代表的是对象,而 $this 所在环境为类内部的方法内部,所以 $this 对象是在类内部访问,因此所有的属性和方法,不受访问修饰限定符限制
__construct() 是一种系统内置的魔术方法,该方法的特性是在对象实例化之后,对象立即自动调用
构造方法的目的就是为了初始化资源,包括对象属性和其他资源
一旦构造方法定义好后,且构造方法自带参数,那么就只能使用 new 类名(参数列表) 方式才能正确实例化
魔术方法也可以通过对象直接调用的方式调用,不过没有实际用处
name = $name; $this->sex = $sex; }}$a = new Article('xiaowang', 'famale');var_dump($a);?>
# 不销毁对象,php在运行结束也会释放资源# end__destruct
定义:将保存对象的变量赋值给另外一个变量
在 PHP 中,对象的传值是引用传递:即一个对象变量赋值给另外一个变量,两个变量指向同一个对象地址,即只有一个对象
';$a->name="wangxiaohu";var_dump($a,$b);echo '
';?> # 输出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" }
有两个冒号组成 “::” ,专门用于类实现类成员操作,可以实现类直接访问类成员
范围解析操作符是用于给类(类名)访问类成员使用的
类名::类成员
范围解析操作符也可以被对象用来当作类使用(不建议)
$对象名::类成员
类常量只能被类访问
NAME 来进行访问的$a=new Article();echo $a::NAME; # 范围解析操作符兼容对象,找到对象所属类最终进行访问,效率降低,灵活性提高?>
类常量是固定的,而对象的属性是不同对象不同的
定义:使用 static 关键字修饰的类成员,表示该成员属于类访问
# 输出object(Article) #1 (0) { } object(Article) #2 (0) { }
类的访问必须保证类在内存中已经存在,所以需要再用类之前将类所在的 PHP 文件加载到内存中
类的加载分为两种
自动加载两种方式
function __autoload($classname){ # 找到对应的文件路径和命名规范,手动加载}
# 自定义类加载函数function 自定义函数($classname){ # 找到对应的文件和命名规范,手动加载}#注册自动加载sql_autoload_register('自定义函数名字')
自动加载要求在声明类的时候有良好的规范
例:手动加载
Article.php
mian.php
getName()); # outputstring(16) "Article::getName"自动加载
一个系统中,可能类文件会放到不同的路径下,因此一个完整的自动加载函数,应该要进行文件判定功能
对象克隆
通过已有的对象复制一个新的同样的对象,但两者之间并非同一个对象
面向对象高级
面向对象三大特性
封装、继承、多态
类的封装
类的继承
inherit,子类合法拥有父类的某些权限
子类也称派生类
父类也称基类
# 父类class Human{}# 子类继承class Man extends Human{}
类的多态
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果
show();
有限继承
子类在继承父类的成员时,并非继承所有内容,而是继承并使用父类部分内容
override,子类中定义了与父类重名的成员
一种明确访问父类成员的表达方式
方法被重写后,访问调用的是子类方法,如果想要访问父类方法,可以通过在子类方法中使用 parent 来强制访问父类方法
parent 不能用于访问父类的属性(静态属性可以)
使用 final 关键字修饰类名,表示此类不可以被继承
final 关键字还能修饰方法,表示方法不能被重写(通常此时类不会使用 final 关键字)
使用 abstract 关键字修饰的类,表示该类只能被继承,不能被实例化
abstract 关键字可以修饰方法,表示方法为抽象方法,抽象方法没有方法体(没有{})
抽象方法存在的类必须为抽象类
继承抽象类的类要么为抽象类,要么实现抽象类里所有的抽象方法
适用于,不同类之间有公共代码,但是类彼此关系不存在继承关系,此时可以将公共代码存储到 trait 中
trait 内部可以拥有一个类能拥有的成员属性(包括静态),成员方法(包括静态和抽象方法),但不能有类常量
trait 用来代码复用,不能被实例化,不能被继承
一个类中可能需要引入多个 trait ,而不同 trait 中可能出现同名
Interface,专门用来规范一些共性类必须实现的方法
interface 接口名字{}
class 类名 implements 接口名字{}
接口成员
接口成员只能有两类
overload,指在一个类中可以出现多个同名方法,彼此之间的参数个数和类型不一样
用来容错
属性重载
当对象访问不存在的或者权限不够的属性的时候,自动触发魔术方法让代码不出错
属性重载魔术方法
方法重载
对象或者类访问不存在或者权限不够的方法,自动触发的魔术方法让代码不出错
将对象中的所有属性以键值对的形式取出并进行访问
对象是一种复合数据类型,对象中真正保存的内容是属性
对象的属性本质也是一种键值对关系:名字 = 值
对象遍历就是利用 foreach 对对象中的属性进行取出解析
对象遍历遵循访问修饰限定符的限定:即类外只能遍历所有共有属性
foreach(对象变量 as [属性名变量 =>] 属性值变量){ #属性名变量代表取出的每个属性的名字 #属性值变量代表取出的每个属性的值}
yield 关键字
design pattern,是软件开发人员在软件开发过程中问题的解决方法
单例模式
singleton,是一种类的设计只会最多产生一个对象的设计思想
保证资源唯一性
工厂模式
。。。。。。
namespace,指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目能出现重名结构问题
基础语法:
namespace 关键字定义空间
命名规则
字母、数字、下划线,不能以数字开头
命名空间必须写在所有代码之前,定义了一个,之后可以定义多个
子空间
subspace,即在已有空间之上,再在内部进行空间划分
子空间直接通过 namespace+路径符号 \ 实现
非限定名称
直接访问元素本身,代表当前所属空间(当前目录)
限定名称
使用空间名+原名,代表访问当前空间子空间(当前目录子目录)
完全限定名称
从根目录(全局空间)开始访问,使用 \ 作为全局空间开始符号(根目录)
全局空间元素访问:使用完全限定名称访问
命名空间引入
分享标题:归纳总结PHP对象基础
标题链接:http://www.shufengxianlan.com/qtweb/news35/319785.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联