2011-09-05 51 views
2

刚开始使用PHP和一般的OOP。从我迄今为止阅读的内容来看,这两者似乎是同义词。这是否是这种情况,如果不是这样,实际上当人们提到对象和类别时,他们通常会互换使用这些术语吗?PHP中的类和对象是相同的东西吗?

+0

@Jared Farrish:相信大家都做;-)我不是在责怪你,我只是试图让所有的事情变得清洁,因为这往往是理念上的误解。 – zerkms

+0

@zerkms - 它发生了。即使是明显的答案也有明显的缺陷。这就是生活。 –

回答

6

通常,人们将作为类别的实例的对象。

所以你有一些类Employee

class Employee { 
    var $name; 
    function get_name () { return $this->name; } 
    function set_name ($new_name) { $this->name = $new_name; } 
} 

并且声明它的实例,如:

$assistant = new Employee(); 

Employee是一类。 $assistant是一个对象,它是Employee类的一个实例。

所以要回答你的问题 - 一个班不是一个对象。您在实例化类时创建一个对象。

+3

有趣的是,在课堂名称前面没有美元。 –

+0

解释它,谢谢。 – Tom

+0

在创建它的一个实例之后,一个类也不是一个对象*。这仍然是一堂课。 –

2

对象和类他们通常交替使用的术语?

号和在其他OOP语言,类是像蓝图的东西,说房子。物体是建造后的实际房屋。的确非常不同。

// blueprint 
class House 
{ 
    public $color; 

    public function __construct($color = 'red') 
    { 
     $this->color = $color; 
    } 

} 

// make red house 
$redHouse = new House(); 

// make blue house 
$blueHouse = new House('blue'); 

// Now we have two different houses (objects) made from the same blueprint (class) 
+1

隐喻+1 –

0

一个类是一个对象的定义。一个对象是一个类的实例。例如:

class Parser { 
    public function parse() {} 
} 

...是一类。您可能会说“解析器可用于解析文本。”

$p = new Parser; 

现在,$p是一个对象。它是Parser类的一个实例。

这对static关键字尤其重要。静态方法和成员属于类,而不是对象。

class Parser { 
    public static $type; 
    public $text; 
} 
$p1 = new Parser; 
$p2 = new Parser; 
$p1::$type = 'php'; 
$p1->text = 'sometext'; 
$p2->text = 'someothertext'; 
echo $p2::$type; //echos "php" 
echo $p1->text; //echos "sometext" 
1

它们当然不是同义词,如果你一直在阅读,那么是时候改变本书了! :-)

类是类型,而对象是实例

一个简单的例子是一个整数。 “整数”表示类型,但整数$x是该类型的一个实例。在PHP中没有一个强大的类型系统,所以这可能不是很明显,但我希望你明白。同样,array是一种类型,但$v = array();创建了一个数组类型的实例(称为$v)。

带班,你不能只是说$y = MyClass();为你做阵列,相反,你必须使用new$y = new MyClass();

0

你可以从你的问题中删除的php,它仍然是一样的东西。

一个类定义对象例如

class Person { 
} 

是定义一个人对象的类。

的区别,当你开始创建类方法和对象方法

class Person { 
    function hair_color(color) { 
    hair_color = color; 
    } 
} 

在PHP中的对象的方法,你可以做这样的事情

austin = new Person() 

austin -> hair_color("brown") 

现在你可以有这样的事情获得更重要

class Person { 
    total = 0; 
    static function total_in_class() { 
    total++; 
    } 
} 

现在这是一个类方法,它会影响所有对象同一类的

这样

austin = new Person(); 
austin -> total_in_class 
tom = new Person(); 
echo tom->total 

现在,如果我的PHP是不是生锈的话,应该呼应1.这是因为在类的所有对象都会受到影响

在红宝石它会如下所示

class Person 
    def hair_color(color) 
    hair_color = color; 
    end 

    def self.total_in_class() 
    total+=1 
    end 
end 

类似和相同的概念适用

相关问题