PHP面向对象

191次阅读
没有评论

共计 2097 个字符,预计需要花费 6 分钟才能阅读完成。

$this self:: parent::

$this 是当前对象的引用,一般出现在方法里,用于获取类的成员属性,或执行类的成员方法。

self:: 是对本类的引用,用于获取当前类的静态成员属性或静态成员方法。

parent:: 是对父类的引用。用于调用父类的方法或属性。

类常量

使用 const 来定义类常量,使用 self:: 来调用类常量。

<?php
class A {
    const YES = 1;
    public function aa() {return self::YES;}
}
echo (new A)->aa(); //1

方法重写

子类可以重写父类的方法,但使用 final 声明的方法,将禁止在子类中重写父类方法。

抽象类

具有抽象方法的类为抽象类,抽象方法即为没有内容的空方法,要求子类进行完善内容,抽象类不能实例化,只能继承。

继承一个抽象类的时候,方法的可见性必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为 protected,那么子类中实现的方法就应该声明为 protected 或者 public,而不能定义 private。

<?php
abstract class A {
    // 强制要求子类定义这些方法
    abstract protected function a1();
    abstract protected function a2($aa);

    // 普通方法(非抽象方法)public function print() {echo '不用强制定义该方法';}
}

class B extends A {protected function a1() {return 'a1 方法被调用';}

    public function a2($aa) {echo " 调用 a1 方法,参数:{$aa},结果:{$this->a1()}";
    }
}

$obj = new B;
$obj->print();
$obj->a2('666');

接口

接口是一种特殊的抽象类,而抽象类又是一种特殊的类,所以可以将接口看作是一种特殊的类。

PHP 只支持单继承,如果想实现多继承,就需要使用接口,通过关键字 interface 来声明接口。

<?php
interface I {
    const NAME = '张三';
    function fun();}

class A implements I {public function fun() {echo self::NAME;}
}
$obj = new A();
$obj->fun(); // 张三 

Trait

PHP 是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,出现了 Trait,为 PHP 单继承而准备的一种代码复用机制。

Trait 和 Class 相似,但无法通过 trait 自身来实例化,在类中使用 use 关键字,声明要组合的 Trait 名称。

<?php
trait A {public function aa() {echo 'aa';}
}
trait B {public function bb() {echo 'bb';}
}
class C {
    use A, B;
    public function cc() {echo 'cc';}
}
$c = new C;
$c->aa(); //aa
$c->bb(); //bb
$c->cc(); //cc

解决冲突

<?php
trait T1 {public function fun() {echo __METHOD__;}
}
trait T2 {public function fun() {echo __METHOD__;}
}

class A {
    use T1, T2 {
        T1::fun insteadof T2;
        T2::fun as fun2;
    }
}
$obj = new A();
$obj->fun(); //T1::fun
$obj->fun2(); //T2::fun

T1::fun insteadof T2; 表示使用 T1::fun 方法替代 T2::fun 方法。

T2::fun as fun2; 将 T2::fun 别名为 T2::fun2。

魔术方法

构造 & 析构方法

构造方法__construct():在创建对象时自动执行,没有返回值,用于执行类的一些初始化工作,如可以在构造方法中传递参数,进行对象属性的初始化。

析构方法__destruct():当所有对象的引用被销毁时执行。

__set() 和__get()

这两个方法不是默认存在的,而是手工添加到类里面去的,像构造方法(__construct())一样,类里面添加了才会存在。

__get():这个方法用来获取私有成员属性值,当尝试读取一个不存在或不可访问的属性值时,PHP 会自动调用__get() 方法。

__set():这个方法用来为私有成员属性设置值,当给一个不存在或不可访问的属性赋值时,PHP 会自动调用__set 方法。

__isset() 和__unset()

当使用 isset() 或者 empty() 函数判断属性是否存在或者是否为空的时候会自动触发。

当使用 unset() 函数判断属性时,如果存在__unset() 方法将会执行。

__call() 和__callStatic()

__call() 用来监视一个对象中的其它方法。如果试着调用一个对象中不存在或被权限控制的方法,__call 方法将会被自动调用。

当调用的静态方法不存在或权限不足时,会自动调用__callStatic 方法。

正文完
 0
阿伯手记
版权声明:本站原创文章,由 阿伯手记 于2023-11-15发表,共计2097字。
转载说明:本站原创内容,除特殊说明外,均基于 CC BY-NC-SA 4.0 协议发布,转载须注明出处与链接。
评论(没有评论)
验证码

阿伯手记

阿伯手记
阿伯手记
喜欢编程,头发渐稀;成长路上,宝藏满地
文章数
766
评论数
204
阅读量
364661
今日一言
-「
热门文章
职场救急!AI请假话术生成器:1秒定制高通过率理由

职场救急!AI请假话术生成器:1秒定制高通过率理由

超级借口 不好开口?借口交给我!智能生成工作请假、上学请假、饭局爽约、约会拒绝、邀约推辞、万能借口等各种借口理...
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
TVAPP:开源电视盒子资源库,一键打造家庭影院

TVAPP:开源电视盒子资源库,一键打造家庭影院

导语 TVAPP 是一个专为 Android TV 电视盒子用户打造的开源影音资源库,集成了影视、直播、游戏等...
国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

本文收集了目前国内已部署 DeepSeek 模型的第三方列表,个个都是免费不限次数的满血版 DeepSeek,...
巴别英语:用美剧和TED演讲轻松提升英语听力与口语

巴别英语:用美剧和TED演讲轻松提升英语听力与口语

还在为枯燥的英语学习而烦恼吗?巴别英语通过创新的美剧学习模式,让英语学习变得生动有趣。平台提供海量美剧和 TE...
2025年12月 每日精选

2025年12月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 12 月 26 日 .ax 顶级域 目前全球唯一...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
最新评论
15220202929 15220202929 怎么用
八对 八对 麻烦大佬更新下【堆新】的友链站名:八对星星描述:极目星视穹苍无界•足履行者大地有疆链接:https://8dui.com图标:https://cf.8dui.com/logo.webp横标:https://cf.8dui.com/logo-w.webp订阅:https://8dui.com/rss.xml
三毛笔记 三毛笔记 已添加
DUINEW DUINEW 已添加贵站,期待贵站友链~博客名称:堆新博客地址:https://duinew.com/博客描述:堆新堆新,引力向新!——堆新(DUINEW)博客头像:https://d.duinew.com/logo.webp横版头像:https://d.duinew.com/logo-w.webp博客订阅:https://duinew.com/rss.xml
hedp hedp 没看懂
bingo bingo 直接生成就可以啦,也可以添加一些选项
满心 满心 申请更新下友联信息,原名:满心记,现名:周天记原域名:qq.mba,现域名:zhoutian.com描述:我在人间混日子
开业吉日 开业吉日 没看明白这个怎么用
开业吉日 开业吉日 beddystories 这个网站太赞了,收藏
热评文章
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
安知鱼主题 简洁美丽Hexo主题 支持文章AI摘要

安知鱼主题 简洁美丽Hexo主题 支持文章AI摘要

安知鱼主题 是一款基于 Hexo 框架简洁美观的博客主题,由 hexo-theme-butterfly 修改而...
国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

国内已部署DeepSeek模型第三方列表 免费满血版联网搜索

本文收集了目前国内已部署 DeepSeek 模型的第三方列表,个个都是免费不限次数的满血版 DeepSeek,...
清华大学官方免费DeepSeek教程

清华大学官方免费DeepSeek教程

AI 领域近期最引人注目的焦点当属 DeepSeek,这款由中国创新企业深度求索研发的人工智能工具,正以开放源...
Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 是一款基于 Fastify、Vercel 和 Supabase 构建的 URL 缩短服务...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
DrawLink:一键生成链接视觉卡片,提升分享点击率

DrawLink:一键生成链接视觉卡片,提升分享点击率

小贴士 :此站或已变迁,但探索不止步。我们已为您备好「类似网站」精选合集,相信其中的发现同样能为您带来惊喜。