PHP中的类和对象是一样的吗?

时间:2011-09-05 02:17:52

标签: php

刚开始使用PHP和OOP中的OOP。从我到目前为止阅读的内容看,这两个似乎是同义词。是这种情况,如果不是,实际上当人们提到对象和类时,他们通常会互换使用这些术语吗?

5 个答案:

答案 0 :(得分: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类的一个实例。

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

答案 1 :(得分: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)

答案 2 :(得分:1)

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

类是类型,而对象是实例

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

对于类,您不能像对数组一样说 $y = MyClass(); ,而是必须使用new$y = new MyClass();

答案 3 :(得分: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"

答案 4 :(得分:0)

你可以从你的问题中移除 php ,但它仍然是一样的。

一个类定义了一个Object,例如

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.这是因为类中的所有对象都受到影响

在ruby中,它看起来如下

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

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

类似和相同的概念适用