php5中类的学习

<div class="codetitle"><a style="CURSOR: pointer" data="23151" class="copybut" id="copybut23151" onclick="doCopy('code23151')"> 代码如下:

<div class="codebody" id="code23151">
<?php
classTEST
{
constNAME='value';//常量
public$name='value';//属性
publicfunctionname()//方法
{
echo'value';
}
}
?>
在这之中,属性和方法又可以使用public,protected,private三个不同的关键字来将属性和方法的作用范围做进一步的区分,带有private关键字的属性和方法,只有所在的类中的方法才能调用;带有protected关键字的属性和方法,除了自己以外,自己的父类和子类中的方法也可以调用;带有public关键字的属性和方法,则可以从实例化以后的对象中进行调用,这样做最大的好处给所有的属性和方法增加了一些描述的特征,更便于整理和组织代码的结构。const关键字先跳过,和后面的static一起讲。 static关键字是有别于public,private的另一类型关键字(因此可以和public,private叠加起来使用): <div class="codetitle"><a style="CURSOR: pointer" data="14865" class="copybut" id="copybut14865" onclick="doCopy('code14865')"> 代码如下:
<div class="codebody" id="code14865">
<?php
classTEST
{
publicstaticfunctionname()
{
echo'value';
}
}
?>

带有static关键字的方法,可以在不对类进行实例化的情况下直接通过“::”符号调用,和public,private的搭配,也可以让调用区分权限,但是一般都是和public搭档,前面提到的常量关键字const,应该就是publicstatic类型的,因此只能通过self::NAME,TEST::NAME这样的形式调用常量,后面的construct,destruct等方法,都是属于static。 类的结构部分,最后介绍的两个关键字是abstract和final,abstract关键字表示这个类必须被他的子类覆写,而final关键字表示这个类必须不能被他的子类覆写,这两个关键字的功能是正好相反的,带有abstract的方法被成为抽象方法,带有抽象方法的类,成为抽象类,这个在后面还有介绍。 类的使用: 类的使用主要有两种方法,一种是使用new关键字,另一种是使用“::”符号: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="92839" class="copybut" id="copybut92839" onclick="doCopy('code92839')"> 代码如下:
<div class="codebody" id="code92839">
<?php
classTEST
{
publicstaticfunctionname()
{
echo'value';
}
}
//方法1:使用new关键字
$test=newTEST;
$test->name(); //方法2:使用“::”符号
TEST::name();
?>
(1):使用new关键字成为实例化,上面的$test就是一个通过TEST类实例化而产生的对象,$test->name()称为调用$test对象的name方法。
(2):使用new关键字使用类的时候,可以使用$this来指代类本身。
(3):使用“::”符号的前提是方法必须是带有static关键字的,使用new关键字时,被调用的方法,必须带有public关键字(一个方法如果不带public,private中的任何一个关键字,则默认为public)
(4):同一个类可以通过new关键字被实例成多个不同的对象,但是彼此之间的是隔离的;“::”符号在使用的时候,方法在多次使用之间,是共享的: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="32360" class="copybut" id="copybut32360" onclick="doCopy('code32360')"> 代码如下:
<div class="codebody" id="code32360">
<?php
classTEST1
{
public$name=0;
publicfunctionname()
{
$this->name=$this->name+1;
}
} $test1=newTEST1;
$test2=newTEST1;
$test1->name();//$name1==1
$test2->name();//$name1==1 /--------------------------------------------/ classTEST2
{
publicstatic$name=0;
publicstaticfunctionname()
{
TEST2::$name=TEST2::$name+1; }
}
TEST2::name();//$name==1
TEST2::name();//$name==2
?>
类的关系: 类与类之间的关系,主要有抽象,接口和继承: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="13797" class="copybut" id="copybut13797" onclick="doCopy('code13797')"> 代码如下:<div class="codebody" id="code13797">
<?php
abstractclassTEST1//抽象
{
abstractpublicfunctionname1();
publicfunctionname2()
{ }
} classTEST2extendsTEST1implementsTEST3//继承
{
publicfunctionname1()
{ }
} interfaceTEST3//接口
{
publicfunctionname2();
}
?>
(1)带有abstract关键字的类是抽象类,带有abstract关键字的方法是抽象方法,抽象类中的抽象方法,必须在子类中被覆写。
(2)带有interface关键字的类,就是接口,接口不允许实现任何的方法,接口中所有的方法,都必须在子类中被覆写。
(3)带有classAextendsclassB或者classAimplementsclassB字样的就是继承,extends表示继承另一个类,implements表示继承另一个接口,一次只能extends一个类,但是可以implements多个接口。
(4)抽象类,接口,以及最终继承并实现的方法,都必须是public的。 在继承的过程中,子类会覆写父类的同名方法,这个时候如果需要在子类中调用父类的方法,可以使用parent关键字或者类名加上“::”符号调用: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="96043" class="copybut" id="copybut96043" onclick="doCopy('code96043')"> 代码如下:<div class="codebody" id="code96043">
<?php
classTEST1extendsTEST2
{
publicfunctionname()
{
echoparent::name2();
echoTEST2::name2();
}
}
classTEST2
{
publicfunctionname2()
{
echo'value2';
}
}
$test=newTEST1;
$test->name();
?>
这里再解释一下“::”方法在类中的作用,一个作用是在没有实例化的情况下调用常量(其实也理解成static就可以了),static属性和方法,再一个是在类的内部,通过self,parent和类名建立便捷的调用通道。 对象于对象之间的关系,主要是“==”等于,“===”全等于,不等于和clone: PHP代码
<?php
classTEST
{
publicfunctionname()
{ }
} $test1=newTEST;
$test2=newTEST;
$test3=$test1;
echo$test1==$test2?true:false;//true
echo$test1==$test3?true:false;//true
echo$test2==$test3?true:false;//true
echo$test1===$test2?true:false;//false
echo$test1===$test3?true:false;//true
echo$test2===$test3?true:false;//false
?> (1)两个类只要拥有相同的属性和方法,就是“==”等于。
(2)两个类必须是指向的同一个对象,才能是“===”全等于。 clone比较特殊,在上面的例子中,$test3=$test1的过程并不是给了$test3一份$test1对象的拷贝,而是让$test3指向了$test1,如果一定要获得一份$test1的拷贝,就必须使用clone关键字: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="22747" class="copybut" id="copybut22747" onclick="doCopy('code22747')"> 代码如下:<div class="codebody" id="code22747">
<?php
$test3=clone$test1;
?>
类的钩子: autoload:
是一个函数名,也是唯一一个在类的外部使用的钩子,在实例化一个对象的时候,如果没有预先载入类,就会调用这个钩子。
construct
在类被实例话的时候,被调用的钩子,可以做一些初始化的操作。 destruct
在类被销毁的时候,被调用的钩子。
call
当对象试图调用一个不存在的方法的时候,被调用的钩子 sleep
当使用serialize()函数对一个类进行序列话操作的时候,会调用这个钩子
wakeup
当使用unserialize()函数对一个类进行反序列话操作的时候,会调用这个钩子 toString
当一个对象将被转变为字符串的时候,会调用这个钩子(比如echo的时候)
set_state
当调用var_export()函数操作一个类的时候,会调用这个钩子 clone
当使用clone关键字对一个类进行拷贝操作的时候,会调用这个钩子
get
在获取一个类中的属性值的时候,会调用这个钩子 set
在设置一个类中的属性值的时候,会调用这个钩子
isset
在使用isset()函数对类中的属性值进行判定的时候,会调用这个钩子 unset
在使用unset()函数销毁一个属性值的时候,会调用这个钩子 类的小技巧: 在实例话一个类的时候,可以使用这样的形式给
construct钩子传递参数: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="42637" class="copybut" id="copybut42637" onclick="doCopy('code42637')"> 代码如下:<div class="codebody" id="code42637">
<?php
classTEST
{
publicfunctionconstruct($para)
{
echo$para;
}
} $test=newTEST('value');//显示value
?>
foreach()函数可以用来对类或者对象中的属性进行遍历,遍历的时候会先判断public,private的情况而显示: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="9525" class="copybut" id="copybut9525" onclick="doCopy('code9525')"> 代码如下:<div class="codebody" id="code9525">
<?php
classTEST
{
public$property1='value1';
public$property2='value2';
public$property3='value3'; publicfunctionname()
{
foreach($thisas$key=>$value)
{
print"$key=>$value\n";
}
}
} $test=newTEST;
foreach($testas$key=>$value)
{
print"$key=>$value\n";
}
$test->name();
?>

在给类中的方法传递参数的时候,可以对参数进行强制的判定,这里只支持对数组和对象的判定: PHP代码
<div class="codetitle"><a style="CURSOR: pointer" data="8861" class="copybut" id="copybut8861" onclick="doCopy('code8861')"> 代码如下:<div class="codebody" id="code8861">
<?php
classTEST1
{
publicfunctionname(TEST2$para)
{ }
} classTEST2
{ } $test2=newTEST2;
$test1=newTEST1; $test1->name('value');//会报错,因为这个参数必须是TEST2实例化以后的对象
$test1->name($test1);//不会报错
?>
兼容php4的语法: php5的类是往下兼容php4的,这些php4时代的语法也得到了继承,但是并不建议在php5的环境中使用。 (1)使用var预设属性,会自动转换成public。 (2)使用类名作为构造函数,在没有
construct构造方法的情况下,会寻找和类名相同的函数作为构造函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何选择合适的 C++ Web 开发框架?
利用 C++ 框架构建高并发 Web 应用的策略
用 C++ 框架开发跨平台图形应用程序
golang框架中安全编码实践的最佳指南是什么?
golang框架与其他语言框架在设计理念上的区别有哪些?
C++ 图形框架与其他语言框架的比较
C++ 框架与其他 Web 开发框架的对比分析
使用 C++ 框架构建大型项目最佳实践
C++ 框架如何提高大型项目开发效率
C++ 框架中依赖注入的持续集成与部署工具
如何与社区协作和贡献到自定义 Golang 框架?
C++ 框架在大型项目中如何实现模块化开发
使用 C++ 框架开发跨平台 Web 应用
C++ 框架在大型项目中的优缺点
golang框架在性能上的优势体现在哪些方面?
C++ 框架在嵌入式系统内存优化中的优势
golang框架在人工智能与机器学习中的作用
如何扩展 Golang 框架以支持特定功能?
如何利用 Go Modules 和依赖项管理来自定义 Golang 框架?
Golang 框架中的性能优化技巧