类定义的本质
既然你已经直接理解了概念,那么让我们看看类定义的本质。
<?php // PHP 5 // class definition class Bear { // define public properties public $name; public $age; // more properties // define public methods public function eat() { echo $this->name." is eating... "; // more code } // more methods } ?>
每个类定义都以紧跟着类的名字的关键字class开始。你可以给你自己的类任意你可以想像的到的名字,只要它不与PHP中所保留的字相冲突即可。一对大括号包含了所有的类变量和函数,这些类变量和函数被编写,正如你通常对他们编写代码一样。
PHP 5也将可见性概念引入对象模型中。可见性控制了对象属性和方法被调用者操作的程度,且它在定义如何打开和关闭你的类中起着重要的作用。存在着三个层次的可见性,范围从最可见的到最不可见的:公开的、私有的和保护的。在类的定义中,你可以通过在属性或者方法之前使用关键字(public、private或protected)之一来标记其可见性。
缺省情况下,类方法和属性是公开的;这允许调用脚本以触及到对象实例内部,然后直接操作这些对象实例。如果你不喜欢这种侵入的思想,那么你可根据你想对对象内部构件放弃多少控制来将某个属性或方法标记为私有的或者保护的(简言之,不止这些)。
因为PHP 4对象模型不包含对可见性的支持,所以上述类定义将无法在PHP 4中实现。相反,你将需要使用下列的方法:
<?php // PHP 4 // class definition class Bear { // define properties var $name; var $weight; var $age; var $sex; var $colour; // define methods function eat() { echo $this->name." is eating... "; } function run() { echo $this->name." is running... "; } function kill() { echo $this->name." is killing prey... "; } function sleep() { echo $this->name." is sleeping... "; } } ?>
从上面可以看出,PHP 4中的类属性和方法总是公开的。而且,你对此无能为力!
为了创建类的一个新实例,你可以使用关键字new将新创建的对象赋值给一个PHP变量。
<?php $daddy = new Bear; ?>
在英语中,上述代码的含义是:创建类Bear()的一个新对象,然后将其赋值给变量$daddy。
现在你可以通过这个变量来访问类的所有方法和属性。比如,下列代码:
<?php $daddy->name = "Daddy Bear"; ?>
其含义是:“将值Daddy Bear赋给类Bear()的特定实例的变量$name”。 再来看下面:
<?php $daddy->sleep(); ?>
上述语句的含义是:“执行类Bear()的特定实例的sleep()函数”。
请注意:->符号用于将对象连接到它们的属性或者方法,以及该事实:当访问一个类实例的属性时符号$被忽略了。