码迷,mamicode.com
首页 > Web开发 > 详细

PHP 设计模式--基础

时间:2019-05-26 21:18:13      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:keyword   pre   life   面向   变量   数组   参数   comm   输出   

设计模式的宗旨就是:重用

在面向对象中,类是用于生成对象的代码模版,而设计模式是用于解决共性问题的代码模版。

遵循这样的模板,我们可以设快速地设计出优秀的代码。

注意,设计模式只是模板,不是具体的代码。

它是为了代码复用,增加可维护性。

在学习设计模式的时候,有几个概念让我很难接受,这可能是从过程式编程转到面向对象编程的禁锢。

假设有这样一个对象:

class Person
{
    private $name = ‘Human‘;

    public function getName()
    {
        return $this->name;
    }
}

1 变量保存对象

不要觉得变量只能保存整形数字,数组和字符串,变量还可以保存对象的:

$man = new Person;
echo $man->getName();

2 传递对象参数

如果另一个类用到了Person类的属性或方法,那直接穿进去就可以了:

class Student
{
    public function __construct($person)
    {
        echo $person->getName();
    }
}

// 传递对象,最后输出字符串“Human”
$jack = new Student(new Person);

但是这样有一个小问题,当传递给new Student()不是一个Person对象时,如下,

$jack = new Student(‘abc‘);

程序就会报错。于是有了第三种做法,限定参数的类型。

3 限定传递参数的类型

在传递参数的时候,就限定参数的类型,这样写:

class Student
{
    public function __construct(Person $person)
    {
        echo $person->getName();
    }
}

// 传递对象,
$jack = new Student(new Person);

这样,传给new Student()的参数必须是Person的实例。

4 用类属性保存对象

还有一种经常用到的做法,就是用一个类的属性保存对象或对象集合。如下:

class Life
{
    public $persons = [];
    
    public function addPerson(Person $person)
    {
        $this->persons[] = $person;
    }
}

$class = new Life();
$class->addPerson(new Person);
$class->addPerson(new Person);

var_dump($class->persons);

输出值:

array(2) {
  [0]=>
  object(Person)#2 (1) {
    ["name":"Person":private]=>
    string(5) "Human"
  }
  [1]=>
  object(Person)#3 (1) {
    ["name":"Person":private]=>
    string(5) "Human"
  }
}

5 小结

面向对象的设计模式都是围绕上面的情形,做一些组合之后形成的。

所以,理解类之间关系才是重点。

PHP 设计模式--基础

标签:keyword   pre   life   面向   变量   数组   参数   comm   输出   

原文地址:https://www.cnblogs.com/gjh99/p/10927513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!