所有分类
  • 所有分类
  • 后端开发
PHP 面向对象编程:类和对象的区别及继承的实现方法

PHP 面向对象编程:类和对象的区别及继承的实现方法

类是创建对象的模板,对象是类的实例。关键字从基类创建派生类实现的。问题:类和对象的区别?解答:示例:登录后复制问题:如何继承?解答:关键字从基类继承派生类:

PHP中的面向对象编程很关键,不仅代码变得更有条理了,还容易看懂和维护。今天咱就聊聊这事儿,说不定会解答你心中的疑问~

类和对象区别

类,就好比盖房子的图纸,规定了一个东西该怎么构造和互动。比如说你家要装修,设计师会给你出一个设计图,这就跟类一样。然后,工人就是按照这图纸来施工造房子,这个过程就是创建对象的过程。虽然所有家装工程用的是相同的图纸,但做出来的各有特色,有自己独特之处,这就是对象的概念。

PHP 面向对象编程:类和对象的区别及继承的实现方法

来举个实际的例子,咱们不妨设计个叫做‘汽车’(Car)的类,其中包括了各种车的细节,比如说颜色啊、速度啊之类的特性,还包含了加速、刹车这样的操作。有了这个根本的模板,我们就可以根据自己喜好在这个基础上创造出各种各样的‘汽车’实例,比如我可能有一辆红色的车,而你呢可能会有一辆蓝色的车,虽然都是用了同一个类(Car),但是我们各人用到的却是完全不同的个体。

如何继承

继承是面向对向编程中的一种功能,帮咱们省了很多事。比方说,如果现在有辆车叫 ‘ Vehicle ‘,它有一堆车该有的东西,然后你还想搞辆车出来,就可以直接用 ‘ Car ‘这个名字。那这辆’ Car ‘车就不用自己去创造那些属性和方法,因为它们都在 ‘ Vehicle ‘车上。

PHP中的经典技巧就是用”extends”(可以理解为“扩展”)这个词实现爹妈与孩子间的关系,就像这样:”class Car extends Vehicle”,那么,”Car”就变成了”Vehicle”的下一代。它不只是自带各种牛逼的功能,而且把上一代的优势也通通吸纳了!

构造方法

构造方法就像是专门帮我们创造新对象的助手,创建对象的时候自然会用到这个方法。我们可以在里面设置好自己想要的属性值,例如,给`Car`类添加个构造方法,设定新车的颜色和速度。这样的话,无论什么时候创建新的`Car`对象,它们都能拥有它们自己独有的颜色和速度了。

在PHP里,建立一个新的实例就是用`__construct`进行定义。比如说,我们定义一下这么一件事:`public function __construct($color, $speed)’。那么,你要想创造出一个新的`Car`类,就能这么做:`$myCar = new Car(‘red’, 100)’。当一波操作做完后,`$myCar`的外观显示就是红色,速度也是100。

方法重写

有时候你可能觉得父类的某个方法不顺手,那就重新编写。比如说 `Vehicle` 类里有个叫 `start` 的方法,你在 `Car` 类里想换种方式启动车辆,只要照葫芦画瓢也写出同样名字的新方法就行。

用PHP搞方法重写,就是在子类里也创建一个和父类名字相同的方法。比如说我们要修改汽车类的启动方法,可以写成这个样子:`public function start()`。那么你在使用汽车这个对象的时候,如果执行`start`方法,那系统就会自动调用属于汽车类的那个版本,而不是车辆类的了。

访问控制

在搞编程的时候,咱们得注意访问控制这个东西,它主要是为了防止别人不经意地乱动咱们的资料。PHP里有三个小开关:`public`、`protected` 和 `private`。随便谁都能碰的就是`public`,只有自己和孩子(子类)能用的是`protected`,而只有自己能用的呢那就是`private`了。

来举例,比如给 `Car` 类里的部分数据定义成 `private`,这样只有 `Car` 自己本身才能改动它们!外面的代码再怎么瞎搞都没辙,保证不会弄乱我们的程序~

class Person {
    public $name;
    public function greet() {
        echo "Hello, my name is $this->name.";
    }
}
$person = new Person();
$person->name = "John";
$person->greet(); // 输出:Hello, my name is John.

静态属性和方法

有时候我们会想要大家都能看看某类里的数据或都能用某个方法,这时候就该用上静态属性和方法!它们可跟普通属性和方法不一样,因为都是属于整个类的,跟哪个具体对象无关。所以在调用时就不用创建什么对象了,直接拿类名叫唤就行!

在PHP编程里,可以通过static关键字设定静态属性或方法!比如说在“汽车”(car)类里面设立一个叫做“总汽车数”(totalCars)的静态属性,用于统计我们创造出来的所有汽车总数。每次造出新的车,就把计数器值加1。

接口

接口就是给一堆方法弄个名字,没啥具体内容。想用这个接口?轻松,找个类来实现它就行。有的一个类就能搞定一个接口,有的还得搞几个。实现完之后,这货就得保证把接口里的代码都给执行了。接口这东西,在做大项目的时候特别好用,可以让各个类都按照同一种方式干活儿。

PHP里,你可以用interface给定义一个接口,然后用implements去实现它。比如说弄个叫`Driveable`的接口,上面得有`start`和`stop`两个方法。接着再让`Car`类去继承这个接口,这样`Car`类就得要有`start`和`stop`这俩方法了。

抽象类

什么叫抽象类?就是那种没法直接拿来用的类,只能让别人来继承。这种类里头可能有很多抽象的方法,就像是空头支票一样,就说怎么做,可是并没有实际的步骤。如果要让子类能用的话,就得给这些抽象方法填上实实在在的内容。像我们设计框架和库的时候,抽象类就特有用,能够搭建好一个大概的架构,却不会把具体如何去做这个事情固定下来。

PHP里,不用怕,咱们能用到‘抽象’这个关键词来搞定抽象类和抽象方法的事情!比如我们可以定义一个叫做`Vehicle`的抽象类,它里面包含了一个叫`start`的抽象方法。接着,再让`Car`类继承`Vehicle`类,实现了`start`方法就大功告成!

命名空间

命名空间就是解决同名冲突的好办法,让咱们可以安心地用同样的名称做不同事情。比如,尽管有两个名叫 `Car` 的类,只要放在不同的命名空间里,就不存在冲突!

哇!PHP里,咱们能利用` namespace `这个关键词~方便地给自己的代码起个名字。例如,可以这么说:`namespace MyProject;`,那么从此以后,我们写的所有类啊、函数啊都归入了 `MyProject` 这个大所属。

Trait

“您看,Trait这东西它就是个代码搬运工!跟塑料袋似的,让你在不同类型的物件上都能用到同一段代码,而且还不用麻烦地搞继承。要是你觉得想重复使点代码,又嫌继承太复杂,那么Trait肯定是你的不二之选啦~”

class Employee extends Person {

在PHP里,咱们可以利用

Trait

关键词创建特殊功能。像是,我们做出了个叫做`Logger`的Trait,它提供了好几种记录日志的特效。接着,无论在哪种类型的类中(比如“汽车”)都能随意运用这个Trait。只要简单地写下:“`class Car { use Logger; }”`即可实现这个效果!

讲总结!PHP面向对象编程可是个好帮手,写代码能用得上。我们今天聊的话题可不少,比如类和对象有啥不一样、怎么继承、什么叫构造方法、还有方法重写之类的。别怕看不懂,我列举了访问控制、静态属性和方法、接口、抽象类、命名空间和Trait等概念。看完这段,相信你对PHP面向对象编程会更熟悉!

好,最后,咱来聊个话题:你曾用哪种面向对象编程的特点做过什么实际的项目呀?最喜欢哪个特点为啥?大家都来说说自己的心得体会跟想法哈。当然了,别忘记给我点个赞还分享一下这篇文章!

原文链接:https://www.icz.com/technicalinformation/web/vue2/2024/07/19160.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?