php class类的用法详细总结(3)

6、抽象类中,如果要实现具体的方法,不能声明为抽象。这样可能实际意义更大。可以把几个类库中共同的部分提取到抽象类中,其它的类继承抽象类即可。如下:

复制代码 代码如下:


abstract class BaseShop{
Const TAX=0.06; // 在抽象类中定义常量
public function buy($gid) { // 如果定义为抽象方法abstract function buy()就不能在这里实现主体。
echo(‘你购买了ID为 :'.$gid.'的商品');
}
public function sell($gid) {
echo(‘你卖了ID为 :'.$gid.'的商品');
}
public function view($gid) {
echo(‘你查看了ID为 :'.$gid.'的商品');
}
}
class BallShop extends BaseShop{
var $itme_id = null;
public function __construct()
{
$this->itme_id = 2314;
}
public function open()
{
$this->sell($this->itme_id);
}
public function getTax()
{
echo printf(‘<h3>平均税率是 %d%%。</h3>',$this::TAX*100);
}
}
$s = new BallShop;
$s->open(); //你卖了ID为 :2314的商品
$shop->getTax();


十:类型提示:
注意,类型提示功能只能用于参数为对象的提示,而无法用于为整数,字串,浮点等类型提示。有些类的方法需要传入的参数为所期望的对象类型,可以用下面的方法达到强制实施此替则。要达到类型提示,只要在方法的对象型参数前加一个已存在的类的名称,如:function funname(OtherClassName $otherclassINSName,$c….),注意,OtherClassName必须是存在的类。如下:

复制代码 代码如下:


class em{ var $k=56; }
class test{
function __construct()
{ echo $this->addab(new em(),2); }

function addab(em $j,$c) //这个方法,即可以在内部调用,也可以在外部调用。只要作用域许可。
{ return $j->k+$c; }
}
$a = new test();
$b = new em();
echo $a->addab($b,2); //或 $a->addab(new em(),2);


十一、类的管理:

1、instanceof关键字:用于分析一个对象是否是某一个类的实例或子类或是实现了某个特定的接口:如下例,但要注意: 类名没有任何引号等定界符,否则会出错。如test不能用'test'

复制代码 代码如下:


class test2{}
class test{}
class testChilern Extends test{}
$a = new test2();
$m = new test();
$i = ($m instanceof test);
if($i)echo ‘$m是类test的实例!<br />'; // get this value
switch ($a instanceof test){
case true :
echo ‘YES<br />';
break;
case false :
echo ‘No<br />'; //get this value
break;
}
$d=new testChilern();
if($d instanceof test)echo ‘$d是类test的子类!<br />'; // get this value


2、确定类是否存在:boolean class_exists(string class_name): class_exists(‘test');

3、返回类名:string get_class(object),成功时返回实例的类名,失败则返回FALSE:

$a = new test2(); echo get_class($a); //返回 test2

4、了解类的公用属性:array get_class_vars(‘className') ,返回关键数组:包含所有定义的public属性名及其相应的值。这个函数不能用实例名做变量

5、返回类方法:get_class_methods(‘test'); //或: get_class_methods($a);可用实例名做参数,返回包括构造函数在内的所有非私有方法。

6、print_r(get_declared_classes())了解当前PHP版本中所有的类名。PHP5有149个。

7、get_object_vars($a)返回实例中所有公用的属性及其值的关联数组。注意它和get_class_vars()的区别:
/* (1) get_object_vars($a)是用实例名做参数,而get_class_vars(‘test')是用类名做参数。
* (2) get_object_vars($a)获得的属性值是实例运行后的值,而get_class_vars(‘test')获得的属性值是类中的初始定义。
* (3) 两者均返回关联数组,且均对未赋值的属性返回NULL的值。如类test中有定义了public $q;则返回Array ( [v] => 5 [q]=>) ,
*/

8、返回父类的名称:get_parent_class($b);//或get_parent_class(‘test2′); 返回test

9、确定接口是否存在:boolean interface_exists($string interface[,boolean autoload])

10、确定对象类型: boolean is_a($obj,'className'),当$obj属于CLASSNAME类时,或属于其子类时,返回TRUE,如果$obj与class类型无关则返回FALSE。如:is_a($a,'test')

11、确定是否是某类的子对象:当$b是继承自TEST类时,返回TRUE,否则FALSE。boolean is_subclass_of($b,'test');

12、确定类或实例中,是否存在某方法。method_exists($a,'getv') //或用method_exists(‘test','getv'),此函数适用于非public定义的作用域的方法。

以上函数实例:

复制代码 代码如下:


class test{
public $v=2;
private $c=5;
function __construct(){
$this->v=5;
}
private function getv(){
return $this->v;
}
}
class test2 extends test{}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/42eadd419cb326a78ddd3aa747177b52.html