php 读 对象,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 '
======================这是华丽的分隔符======================
';

// 类

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 StudyDesignModeTest::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 '
======================这是华丽的分隔符 获取最大值======================
';

echo $test->printMaxValue();

echo '
======================这是华丽的分隔符 获取最小值======================
';

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 '
======================这是华丽的分隔符======================
';

$bicycle = new Bicycle();

echo $bicycle->run();复制代码

结果:

速度100

======================这是华丽的分隔符======================

速度15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值