PHP中对象和类的区别是什么?

28

在PHP中,Object和Class有什么区别?我之所以问是因为我不太明白它们的存在意义。

你能给我用一个好的例子来说明它们的差异吗?


1
在PHP中,类是必要的,因为它遵循更古老和更静态的面向对象编程范式。在基于原型的语言(如JavaScript,Lua)中,你实际上只需要对象。因此,对于是否需要类的混淆是有道理的。 - mario
3个回答

56

假设你已经阅读了有关PHP基本面向对象编程的手册。

类是用来定义对象属性、方法和行为的,而对象则是从类中创建出来的东西。可以将类看作一个蓝图,将对象看作按照蓝图(类)建造出来的实际建筑物。(是的,我知道蓝图/建筑物的比喻已经用烂了。)

// Class
class MyClass {
    public $var;

    // Constructor
    public function __construct($var) {
        echo 'Created an object of MyClass';
        $this->var = $var;
    }

    public function show_var() {
        echo $this->var;
    }
}

// Make an object
$objA = new MyClass('A');

// Call an object method to show the object's property
$objA->show_var();

// Make another object and do the same
$objB = new MyClass('B');
$objB->show_var();

这里的对象是独立的(A 和 B),但它们都是 MyClass 类的对象。回到蓝图/建筑类比,可以将其视为使用相同的蓝图构建两个不同的建筑物。

如果需要更加字面的例子,这里有另外一段关于建筑物的代码片段:

// Class
class Building {
    // Object variables/properties
    private $number_of_floors = 5; // Each building has 5 floors
    private $color;

    // Constructor
    public function __construct($paint) {
        $this->color = $paint;
    }

    public function describe() {
        printf('This building has %d floors. It is %s in color.', 
            $this->number_of_floors, 
            $this->color
        );
    }
}

// Build a building and paint it red
$bldgA = new Building('red');

// Build another building and paint it blue
$bldgB = new Building('blue');

// Tell us how many floors these buildings have, and their painted color
$bldgA->describe();
$bldgB->describe();

4
PHP将对象视为引用或句柄(handle),这意味着每个变量都包含一个对象引用,而不是整个对象的副本。+1 - KJYe.Name
4
很好的、有教育意义的例子!初学者常常将类和实例(对象)混淆。 - Max Kielland
我有一个问题,为什么private $number_of_floors = 5;private $color;被称为“对象变量/属性”?而public function __construct($paint)则被称为“类构造函数”。那么,为什么不像“类构造函数”一样,将它们称为“类变量/属性”,而不是“对象变量/属性”呢? - codenext
1
@codenext:你说得很对。像C#这样的其他语言将实例构造函数称为实例构造函数,尽管他们这样做主要是因为他们既有实例构造函数又有静态构造函数。PHP没有静态构造函数,但我可以理解“类构造函数”可能会让从C#或其他语言过来的人感到困惑。 - BoltClock
那么两个对象之间一个对象拥有更多方法,与另一个对象相比在内存方面有什么不同呢? - TomSawyer

2

针对新开发者:

类是一组方法和变量的集合。

class Test{

  const t = "OK";
  var $Test;
  function TestFunction(){

  }
}

对象

对象是类的一个实例(当您想要使用您创建的类和其它实例时)。

$test = new Test();
$test->TestFunction();//so here you can call to your class' function through the instance(Object)

1
simple and nice ! :) - proofzy

0

类是包含结构和行为定义的一组,而对象则是具有结构和行为的任何东西。对象是类的实例,我们可以创建多个相同类的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接