什么是PHP类?什么是PHP类?(What is a class in PHP?)

2019-05-09 01:32发布

我有一本书了解PHP类的严重问题。 他们似乎非常困难。 什么是他们的目的,他们如何工作的?

Answer 1:

概括地说,一类是一个对象的蓝图。 和对象概念封装相关国家和在你的应用什么责任,通常提供了一个编程接口,用以与这些交互。 这就造成了代码重用和提高可维护性。


想象一下,一个锁:

namespace MyExample;

class Lock
{
    private $isLocked = false;

    public function unlock()
    {
        $this->isLocked = false;
        echo 'You unlocked the Lock';
    }
    public function lock()
    {
        $this->isLocked = true;
        echo 'You locked the Lock';
    }
    public function isLocked()
    {
        return $this->isLocked;
    }
}

忽略namespaceprivatepublic现在声明。

该锁类是应用程序中的所有锁的蓝图。 锁可以锁定解锁 ,由属性表示$isLocked 。 因为它只能有这两种状态,我用一个布尔值( truefalse )来指示适用的状态。 通过它的方法我可以锁定交互lockunlock ,这将相应地更改状态。 该isLocked方法会给我锁的当前状态。 现在,当你创建一个对象,从这个蓝图(通常也被称为实例 ),它将封装独特的状态,例如

$aLock = new Lock; // Create object from the class blueprint
$aLock->unlock();  // You unlocked the Lock
$aLock->lock();    // You locked the Lock

让我们创建另一把锁,还封装它自己的状态

$anotherLock = new Lock;
$anotherLock->unlock(); // You unlocked the Lock

但由于每个对象/实例封装它自己的状态,在第一锁保持锁定

var_dump( $aLock->isLocked() );       // gives Boolean true
var_dump( $anotherLock->isLocked() ); // gives Boolean false

现在,无论是保持锁定或解锁一个锁定的整个reponsibility是锁类中encaspulated。 您没有要锁定的东西,每次来重建它,如果你想改变一个锁是如何工作的,你可以在锁定的蓝图改变这种不是一个锁定的所有类的,例如门:

class Door
{
    private $lock;
    private $connectsTo;

    public function __construct(Lock $lock)
    {
        $this->lock = $lock;
        $this->connectsTo = 'bedroom';
    }
    public function open()
    {
        if($this->lock->isLocked()) {
            echo 'Cannot open Door. It is locked.';
        } else {
            echo 'You opened the Door connecting to: ', $this->connectsTo;
        }
    }
}

现在,当你创建一个门对象,你可以锁定一个物体分配给它。 由于锁定对象处理的东西是否被锁定或解锁所有的责任,门不必在意这一点。 事实上,可以使用任何锁定的对象就不必在意,例如胸部

class Chest
{
    private $lock;
    private $loot;

    public function __construct(Lock $lock)
    {
        $this->lock = $lock;
        $this->loot = 'Tons of Pieces of Eight';
    }
    public function getLoot()
    {
        if($this->lock->isLocked()) {
            echo 'Cannot get Loot. The chest is locked.';
        } else {
            echo 'You looted the chest and got:', $this->loot;
        }
    }
}

正如你所看到的,胸部的reponsibility是从一个门的不同。 胸部包含战利品,而门隔开的房间。 你可以编写的锁定或解锁状态到两个班,但有一个单独的锁类,你不必和可以重复使用的锁。

$doorLock = new Lock;
$myDoor = new Door($doorLock);

$chestLock = new Lock;
$myChest new Chest($chestLock);

胸部和门,现在有自己独特的锁。 如果锁定,可在多个地方同时在量子物理存在,就像一个神奇的锁,你可以指定同一把锁既胸部和门,如

$quantumLock = new Lock;
$myDoor = new Door($quantumLock);
$myChest new Chest($quantumLock);

当你unlock()$quantumLock ,既门和胸部将被解锁。

尽管我承认量子锁是一个坏榜样,它说明的对象,而不是重建国家和责任感所有的地方的分享的概念。 一个真实的例子可能是您通过使用数据库类的数据库对象。

需要注意的是上面的例子中不显示怎么去胸部的锁或门用lock()unlock()方法。 在我离开这个作为一个练习,你的工作了(或其他人添加)。

还要检查什么时候使用自超过$吗? 对于类和对象以及如何与他们合作,更深入的解释

对于一些额外的资源检查

  • http://en.wikipedia.org/wiki/Object-oriented_programming
  • http://www.php.net/manual/en/language.oop5.php
  • http://www.tuxradar.com/practicalphp
  • http://www.phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html
  • http://articles.sitepoint.com/article/object-oriented-php


Answer 2:

我知道你要的资源,而不是一个解释,但这里的东西通过我的理解类的基本实现:

试想类作为建筑的模板。 一个基本的素描建筑应该是什么样子等。 当你要真正建立它,你改变一些东西,所以它看起来像你的客户需要(在课堂上的案例属性)。 现在,你要设计的建筑里面的东西如何去表现( 方法 )。 我要告诉它在一个简单的例子。

建筑类:

/**
 * Constructs a building.
 */
class Building
{
    private $name;
    private $height;


    public function __construct( $name, $height )
    {
        $this->name = $name;
        $this->height = $height;
    }

    /**
     * Returns name of building.
     * 
     * @return string
     */
    public function getName( )
    {
        return $this->name;
    }


    public function elevatorUp( )
    {
        // Implementation
    }


    public function elevatorDown( )
    {
        // Implementation
    }


    public function lockDoor( )
    {
        // Implementation
    }
}

调用类:

// Empire State Building
$empireStateBuilding = new Building( "Empire State Building", 381 );

echo $empireStateBuilding->getName( );
$empireStateBuilding->lockDoor( );


// Burj Khalifa
$burjKhalifa = new Building( "Burj Khalifa", 828 );

echo $burjKhalifa->getName( );
$burjKhalifa->lockDoor( );

只需复制它,在你的本地主机上运行它,并尝试做一些改变。 在有任何问题,只是问我。 如果你没有找到以前的海报这个有用的,只是使用的链接,这些都是非常稳固的教程。



Answer 3:

为了提供从如果我可以取悦另一角度的视图(根据个人经验)。 你需要感到“OOP的需要”,才能真正了解什么是一回事 - 恕我直言,学习资源应该来这之后。

人们会基本上是“需要”被写相对大块写在程序式的软件时(而不是面向对象的,对不起,如果有人用术语不同意)停留在结构性困难。 届时,他/她可以尝试的代码重组为对象,以更好地组织它,自然,了解OOP的细节。 再次,这是我个人的经验,并把我带进了解比任何一本书快。

只是我的两分钱。



文章来源: What is a class in PHP?
标签: php class