2010年最新PHP类的精缩归纳

chengren-成人-php系列3

十:类型提示:

注意,类型提示功能只能用于参数为对象的提示,而无法用于为整数,字串,浮点等类型提示。有些类的方法需要传入的参数为所期望的对象类型,可以用下面的方法达到强制实施此替则。要达到类型提示,只要在方法的对象型参数前加一个已存在的类的名称,如: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{}

$a=new test();
$b=new test2();
print_r( get_class_methods('test')); //或:print_r( get_class_methods($a)); 均返回:Array ( [0] => __construct [1] => getv )
echo '<br />';
print_r( get_class_vars('test')); //返回:Array ( [v] => 2 ),和上面不一样,不能用print_r( get_class_methods($a));
echo '<br />';
echo get_parent_class($b);//或get_parent_class('test2'); 返回test
echo '<br />';
echo is_a($b,'test');// 返回1
echo '<br />';
if(is_subclass_of('test2','test'))echo '是子类!'; //或(is_subclass_of($b,'test')),返回1,当参数1为$a时则返回false,
echo '<br />';
echo method_exists($a,'getv') //或用method_exists('test','getv')返回1,本函数也适用于用private等定义域的方法。

十一、自动加载类库文件:

当类多了以后,比如要在一个文件中载入3个类库文件:a.class.php,b.class.php,c.class.php要用三个require_once

require_once('classes/a.class.php);
require_once('classes/b.class.php);
require_once('classes/c.class.php);

可以用PHP5自动加载的功能来处理:在全局应用配置文件中,定义一个特殊的函数__autoload($class)函数(__autoload并不是一个类的方法,只是单独的函数,和类没有关系):

function __autoload($class){
require_once("classes/$class)
}

该函数放哪没有关系,在创建类实例时,也不必去调用这个autoload函数。PHP会自动完成。但务必注意一点:“在调用页面上创建实例所使用的类名称”、和“被调用的文件名”、以及“该文件中的类的名称”3个必须是一样的。这样就不需要去调用__autoload();如果不一样则必须单独调用__autoload('c');并给它一个文件名前缀。如:
c.class.php文件的代码是:

<?php
class c{
public $m=7;
}
?>这里代码的类名称是c,而文件名也是c,
现在要在index.php调用:
<?php
function __autoload($class){
require_once "$class.class.php";
}

$m = new c(); //创建实例调用的类也是c
echo $m->m;
?>

此时PHP会自动调用根目录下的c.class.php中的类C。

但如果c.class.php中的代码是:

<?php
class mm{
public $m=7;
}
?>
而调用页index.php代码是:
<?php
function __autoload($class){
require_once "$class.class.php";
}
# __autoload('c'); //如果不加这一行就会出错。
$m = new mm();
echo $m->m;
?>

会出错,提示找不到mm.class.php文件。这时可以加一行__autoload('c');但这样就达不到简化代码的目的。

转载于:https://www.cnblogs.com/chengren/archive/2010/03/30/1700386.html

chengren-成人-php系列3相关推荐

  1. 亚马逊中国站获取商品列表

    目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处 ...

  2. 成人高考 计算机英语作文,2018年成人高考英语作文范文六篇

    [导语]成人高考是成人高等学校招生统一考试的简称,属国民教育系列,国家承认学历,参加全国招生统一考试,各省.自治区.直辖市统一组织录取.无忧考网为了帮助同学们更好的备考,特别整理了成人高考英语作文范文 ...

  3. 15g1和g2和g3区别大吗_河南成人高考和普通高考的区别有哪些?成人高考难度会越来越大吗?...

    成人高考是我国成人高等学校选拔合格的毕业生以进入更高层次学历教育的入学考试,属于国民教育系列教育,已经列入国家招生计划.成人高考和普通高考一样,属于全国统考.那么河南成人高考和普通高考的区别有哪些?成 ...

  4. 成人高考大学计算机基础答案,江苏省2019年成人高考大学计算机基础统考样卷...

    江苏省2019年成人高考大学计算机基础统考样卷 下面是江苏省成人高考大学计算机基础统考样卷,大家可自行参考.本次考试时间是6月22日,各位同学别错过考试时间. 说明: 1.运行桌面上考试系统,进入登录 ...

  5. lass翻译_【专题讲座】政务翻译人才培训系列讲座(1)

    12月4日,笔译队邀请苏州大学杜争鸣教授为笔译队做政务翻译人才培训讲座第一讲.在此次讲座中,杜争鸣老师以<自然英语学习法>为蓝本,介绍了自然英语学习法.作为系列讲座的第一讲,杜老师选择先不 ...

  6. smzdm 扫地机器人_堪称米家最值!米家系列扫地机器人选购须知

    堪称米家最值!米家系列扫地机器人选购须知 2018-05-14 17:34:44 102点赞 354收藏 81评论 本篇内容来自#全民分享季#第三季活动,本周选题#分享你的生活记录#,共同瓜分5000 ...

  7. 江苏成教计算机统考操作题多少分,江苏省成人计算机统考试题,操作题.doc

    江苏省成人计算机统考试题<操作题> 二.操作题(60分) 1.调入考生文件夹中的ED.RTF文件,参考样张(附后)按下列要求进行操作. (1)将页面设置为:16开纸,左.右页边距均为2厘米 ...

  8. 蚂蚁金服 Service Mesh 大规模落地系列 - 运维篇

    <蚂蚁金服 Service Mesh 大规模落地系列>将会从核心.RPC.消息.无线网关.控制面.安全.运维.测试等模块对 Service Mesh 双十一大规模落地实践进行详细解析,文末 ...

  9. 【缅怀妈妈系列诗歌】之八:妈妈,我不会忘记

    [缅怀妈妈系列诗歌]之八:妈妈,我不会忘记 题记:妈妈,您这一生为我付出的太多太多,让您受尽了委屈和苦难,历经了不幸的一生, 孩儿将永远铭记着你无私的爱和教诲,勇往直前,毅然前行! 谨以这一系列文章和 ...

最新文章

  1. JZOJ #4722 跳楼机 (最短路模型的完美转化)
  2. Kali Linux 2017中Scapy运行bug解决
  3. 从 HTTP 到 HTTP/3 的发展简史
  4. linux7怎么查看rsync状态,linux – Rsync显示单个文件的进度
  5. CNN tflearn处理mnist图像识别代码解说——conv_2d参数解释,整个网络的训练,主要就是为了学那个卷积核啊。...
  6. java hashset 源码_Java集合源码分析-HashSet和LinkedHashSet
  7. [Unity] 3D数学基础 - 坐标系、向量、矩阵
  8. golang 三种接口的定义方式
  9. BZOJ1026[SCOI2009]windy数
  10. mysql 插入多行_MySQL使用INSERT插入多条记录
  11. Windows下的命令行。
  12. 国产各数据库厂商数据库梳理
  13. 自动控制原理9.3---线性定常系统的反馈结构及状态观测器
  14. python|文本文件的处理
  15. 笔记本电脑开机后自带的键盘用不了,需要重启电脑才能用
  16. //5. 有若干本图书,图书信息包括图书书名、作者、出版社和价格。要求输出图书价格(const成员函数), //显示图书书名、作者、出版社(非const成员函数)、根据图书书名查找图书并显示相关信息等
  17. openoffice将word转pdf中文乱码或消失的坑
  18. vue+webpack前端开发项目的安装方法
  19. 信用卡套现千万别触碰这两条红线,否则银行会盯上你!
  20. Computer Organization and Architecture 10th - William Stallings

热门文章

  1. VTK:PolyData之AlignTwoPolyDatas
  2. VTK:图表之ColorVertexLabels
  3. OpenCV使用功能匹配模板的实例(附完整代码)
  4. OpenCV文件输入输出的序列化功能的实例(附完整代码)
  5. C语言任何基数转换为十进制(附完整源码)
  6. CUDA ERROR: device-side assert triggered at解决
  7. Python邮件发送案例
  8. 分布式系统概述(来自学习资料)
  9. boost标准库开发环境搭建boost标准库环境搭建以及简单案例介绍
  10. Mule3配置文件(有关jdbc配置)