分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

PHP 对象基础知识

发布时间:2023-09-06 02:18责任编辑:熊小新关键词:PHP

最近开始重新学习对象知识,其实也算是初步深入学习对象和设计模式,希望自己会坚持下去,保持更新

初识PHP对象

还记得,刚开始学习 PHP 的时候,学到到方法和对象时有一个很大的疑问,对象与方法相比较那么麻烦(需要设置属性,给属性赋值,实例化类,调用)为什么还要用对象呢?随着逐步的深入才发现,自己之前的想法是有多可笑,下面给一个简单的示例。

function get_max($val_1, $val_2){ ??return $val_1 > $val_2 ? $val_1 : $val_2;}$max = get_max(23,34);echo $max;echo ‘<br>======================这是华丽的分隔符======================<br>‘;// 类class Test{ ???// 属性 ???public $val_1; ???public $val_2; ???// 类的方法 ???public function __construct($val_1, $val_2) ???{ ???????$this->val_1 = $val_1; ???????$this->val_2 = $val_2; ???} ???public function get_max() ???{ ???????return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; ???}}// 实例化类,$test 是由类 Test 生成的对象$test = new Test(83, 34);echo $test->get_max();

可以看到使用对象比单纯的方法多了很多代码,但是为什么还要使用对象呢,我们下一节详细介绍,别走开,往下看

为什么使用对象

什么是对象?什么是类?很多人会把两个搞混淆,我们可以把类看做一个工厂,产出的产品就是对象,也就是对象是类的实现。

一个类通常包含属性、方法。举个??:有一个生产面包的机器(类),生成面包需要一些材料(属性),材料包含面粉、鸡蛋、水(不熟悉)。有了材料就可以运作生成面包了,这时机器会把准备好的材料放一起处理(方法)生成面包。

关键字也是很重要的概念,用来决定声明的属性或方法的可见性,包含: public、protected、private。一个属性或方法设置为 public 就代表无论在对象内还是对象外都可以被使用,比如面包机里如果有一个搅拌机(仅限如果),如果这个搅拌机设置为public,则这个搅拌机可以被任何品牌的面包机使用。如果设置为 protected,则只能在同品牌的面包机中使用(继承的类)。如果设置为private则只能被自己用。

回到上节问题,对比方法,问什么使用对象?因为方便,没错真的方便。因为对象有以下几个特点:

  • 封装性
  • 继承
  • 多态

封装性

封装:顾名思义,就是把类的属性和方法封装起来,设置权限(public|protected|private),如下:

class Test{ ???public $val_1; ???protected $val_2; ???public function __construct($val_1, $val_2) ???{ ???????$this->val_1 = $val_1; ???????$this->val_2 = $val_2; ???} ???protected function get_max() ???{ ???????return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; ???}}$test = new Test(83, 34);echo $test->get_max();

封装的好处是安全、可控。
以上代码因为引用了 protected 声明的方法,因此会报如下的错误
Fatal error: Uncaught Error: Call to protected method StudyDesignMode\Test::get_max() from context ‘‘ in ...

继承

同样顾名思义,就是继承分类的方法或属性,只能继承 public | protected 关键字声明的方法或属性。继承的主要作用是多个不同的类都需要同样的一个方法,可以使用继承。比如多个网站页面(每个页面都是单独的类)都需要验证是否登录,这时候可以定义一个父类,里面验证是否登录,再由需要验证登录的类继承,这样就不需要每个类都写一次验证。

class Test{ ???private $val_1; ???private $val_2; ???protected function set_value($val_1, $val_2) ???{ ???????$this->val_1 = $val_1; ???????$this->val_2 = $val_2; ???} ???protected function getMax() ???{ ???????return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; ???} ???protected function getMin() ???{ ???????return $this->val_1 > $this->val_2 ? $this->val_2 : $this->val_1; ???}}class TestSub extends Test{ ???public function __construct($val_1, $val_2) ???{ ???????$this->set_value($val_1, $val_2); ???} ???// 简单功能测试 ???public function printMaxValue() ???{ ???????echo $this->getMax(); ???} ???public function printMinValue() ???{ ???????echo $this->getMin(); ???}}$test = new TestSub(83, 34);echo ‘<br>======================这是华丽的分隔符 获取最大值======================<br>‘;echo $test->printMaxValue();echo ‘<br>======================这是华丽的分隔符 获取最小值======================<br>‘;echo $test->printMinValue();

结果:
======================这是华丽的分隔符 获取最大值======================
83
======================这是华丽的分隔符 获取最小值======================
34

多态

就是让具有继承关系的不同类对象重写类中的方法(两个类中有相同名称的方法),典型的应用是抽象类(abstract)和接口类(interface)。如下:

abstract class Vehicle{ ???abstract public function run();}class Car extends Vehicle{ ???public function run() ???{ ???????echo ‘速度100‘; ???}}class Bicycle extends Vehicle{ ???public function run() ???{ ???????echo ‘速度15‘; ???}}$car = new Car();echo $car->run();echo ‘<br>======================这是华丽的分隔符======================<br>‘;$bicycle = new Bicycle();echo $bicycle->run();

结果:
速度100
======================这是华丽的分隔符======================
速度15

PHP 对象基础知识

原文地址:https://www.cnblogs.com/it-abel/p/9813877.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved