php 中class,PHP5中的类(class) (转)

类的结构:

类的内部能可能有三种东西,就是常量(constant),属性(property)和方法(method),功能可以理解成类外部的常量,变量和函数。

在这之中,属性和方法又可以使用public, protected, private三个不同的关键字来将属性和方法的作用范围做进一步的区分,带有private关键字的属性和方法,只有所在的类中的方法才能调用;带有protected关键字的属性和方法,除了自己以外,自己的父类和子类中的方法也可以调用;带有public关键字的属性和方法,则可以从实例化以后的对象中进行调用,这样做最大的好处给所有的属性和方法增加了一些描述的特征,更便于整理和组织代码的结构。const关键字先跳过,和后面的static一起讲。

static关键字是有别于public, protected, private的另一类型关键字(因此可以和public, protected, private叠加起来使用):

带有static关键字的方法,可以在不对类进行实例化的情况下直接通过“::”符号调用,和public, protected, private的搭配,也可以让调用区分权限,但是一般都是和public搭档,前面提到的常量关键字const,应该就是public static类型的,因此只能通过self::NAME,TEST::NAME这样的形式调用常量,后面的__construct,__destruct等方法,都是属于static。

类的结构部分,最后介绍的两个关键字是abstract和final,abstract关键字表示这个类必须被他的子类覆写,而final关键字表示这个类必须不能被他的子类覆写,这两个关键字的功能是正好相反的,带有abstract的方法被成为抽象方法,带有抽象方法的类,成为抽象类,这个在后面还有介绍。

类的使用:

类的使用主要有两种方法,一种是使用new关键字,另一种是使用“::”符号:

<?phpclassTEST {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, protected, private中的任何一个关键字,则默认为public)

(4):同一个类可以通过new关键字被实例成多个不同的对象,但是彼此之间的是隔离的;“::”符号在使用的时候,方法在多次使用之间,是共享的:

<?phpclassTEST1 {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 == 1TEST2::name();// $name == 2?>

类的关系:

类与类之间的关系,主要有抽象,接口和继承:

(1)带有abstract关键字的类是抽象类,带有abstract关键字的方法是抽象方法,抽象类中的抽象方法,必须在子类中被覆写。

(2)带有interface关键字的类,就是接口,接口不允许实现任何的方法,接口中所有的方法,都必须在子类中被覆写。

(3)带有 classA extends classB 或者 classA implements classB 字样的就是继承,extends表示继承另一个类,implements表示继承另一个接口,一次只能extends一个类,但是可以implements多个接口。

(4)抽象类,接口,以及最终继承并实现的方法,都必须是public的。

在继承的过程中,子类会覆写父类的同名方法,这个时候如果需要在子类中调用父类的方法,可以使用parent关键字或者类名加上“::”符号调用:

<?phpclassTEST1extendsTEST2 {publicfunctionname(){echoparent::name2();echoTEST2::name2();}}classTEST2{publicfunctionname2(){echo'value2';}}$test=newTEST1;$test->name();?>

这里再解释一下“::”方法在类中的作用,一个作用是在没有实例化的情况下调用常量(其实也理解成static就可以了),static属性和方法,再一个是在类的内部,通过self,parent和类名建立便捷的调用通道。

对象于对象之间的关系,主要是“==”等于,“===”全等于,不等于和clone:

(1)两个类只要拥有相同的属性和方法,就是“==”等于。

(2)两个类必须是指向的同一个对象,才能是“===”全等于。

clone比较特殊,在上面的例子中,$test3 = $test1的过程并不是给了 $test3 一份 $test1 对象的拷贝,而是让 $test3 指向了 $test1,如果一定要获得一份$test1的拷贝,就必须使用clone关键字:

类的钩子:

__autoload:

是一个函数名,也是唯一一个在类的外部使用的钩子,在实例化一个对象的时候,如果没有预先载入类,就会调用这个钩子。

__construct

在类被实例话的时候,被调用的钩子,可以做一些初始化的操作。

__destruct

在类被销毁的时候,被调用的钩子。

__call

当对象试图调用一个不存在的方法的时候,被调用的钩子

__sleep

当使用serialize()函数对一个类进行序列话操作的时候,会调用这个钩子

__wakeup

当使用unserialize()函数对一个类进行反序列话操作的时候,会调用这个钩子

__toString

当一个对象将被转变为字符串的时候,会调用这个钩子(比如echo的时候)

__set_state

当调用var_export()函数操作一个类的时候,会调用这个钩子

__clone

当使用clone关键字对一个类进行拷贝操作的时候,会调用这个钩子

__get

在获取一个类中的属性值的时候,会调用这个钩子

__set

在设置一个类中的属性值的时候,会调用这个钩子

__isset

在使用isset()函数对类中的属性值进行判定的时候,会调用这个钩子

__unset

在使用unset()函数销毁一个属性值的时候,会调用这个钩子

类的小技巧:

在实例话一个类的时候,可以使用这样的形式给__construct钩子传递参数:

foreach()函数可以用来对类或者对象中的属性进行遍历,遍历的时候会先判断public, protected, private的情况而显示:

<?phpclassTEST {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();?>

在给类中的方法传递参数的时候,可以对参数进行强制的判定,这里只支持对数组和对象的判定:

<?phpclassTEST1 {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构造方法的情况下,会寻找和类名相同的函数作为构造函数。

posted on 2008-03-29 17:34 冰之焰 阅读(311) 评论(0)  编辑 收藏 引用 网摘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Php jsondb,JsonDB-PHP

JsonDB项目介绍JsonDB是一个由原生PHP实现的文件数据库&#xff0c;JsonDB只有一个文件&#xff0c;如果你不想使用庞大的数据库系统&#xff0c;而且只需要单机功能&#xff0c;那么JsonDB就是你最佳的选择。 JsonDB只有初始化写入和查询功能,所以适用于比较固定的,数据量不大…

php 发送post请求json,thinkphp ,php post发送json请求,就收post请求

发送方的代码如下namespace Api\Controller;use Think\Controller;class IndexController extends Controller{public function send(){ini_set("error_reporting","E_ALL & ~E_NOTICE");$obj->phonenum 15340958922;$data json_encode($obj);$ur…

lavarel php区别,laravel中{{}}和{!! !!}的区别详解

本篇文章介绍了laravel中{{}}和{!! !!}的区别&#xff0c;感兴趣的朋友可以参考下。laravel中{{}}和{!! !!}的区别详解1.{{}}和{!! !!} 中{{}}支持转义 一段html代码只是被当成普通的字符串输出 &#xff0c;{!! !!} 不支持转义 一段html代码可以被正常的解析1.2具体什么意思呢…

php获取ios,IOS 通过描述获取UDID PHP代码版

难点在于PHP对XML的解析文件结构&#xff1a;第一步&#xff1a;新建HTML文件 用于跳转安装描述文件 必须在safari里面打开地址第二步&#xff1a;新建udid.mobileconfig文件PayloadContentURLhttps://www.xxx.com/pay_super/receive.phpDeviceAttributesUDIDIMEIICCIDVERSIONP…

matlab如何读取csv,Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件 | 学步园...

CSV&#xff0c;逗号分开的文件&#xff0c;如果能快速的读取这些文件中的数据&#xff0c;无疑会帮助我们解决很多问题。1、 只有数据的CSV文件&#xff0c;CSV file that includes only numbers.As an example, create a text file, named as data.csv if you prefer, which …

matlab怎么写集合,matlab集合操作

C intersect(A,B) -- 返回A和B的交集(相同元素)%----C中的元素将会从小到大排序----%如果A和B都是向量&#xff0c;那么返回A、B中的相同元素如果A和B都是矩阵&#xff0c;intersect(A,B,rows) 将返回A、B中的相同列还有一种调用格式&#xff1a;[C,IA,IB] intersect(A,B);其…

php表单验证内容不能为空,php校验表单检测字段是否为空的方法_PHP教程

php校验表单检测字段是否为空的方法这篇文章主要介绍了php校验表单检测字段是否为空的方法,涉及php验证表单的技巧,非常具有实用价值,需要的朋友可以参考下本文实例讲述了php校验表单检测字段是否为空的方法。分享给大家供大家参考。具体如下&#xff1a;php校验表单&#xff0…

url中隐藏php后缀,url中如何隐藏.php

url中隐藏“.php”的方法&#xff1a;首先找到并打开“nginx.conf”配置文件&#xff1b;然后添加内容“location / {ttry_files $uri $uri/ $uri.php$is_args$args;}”&#xff1b;最后保存修改即可。推荐&#xff1a;《PHP视频教程》现在很多人都喜欢用nginx作为Web服务器部署…

php字符串中单引号与双引号的区别,简单概括PHP的字符串中单引号与双引号的区别...

今天有个朋友问起,说下区别,顺便复习下。单引号与双引号的不同&#xff1a;" "双引号里面的字段会经过编译器解释&#xff0c;然后再当作HTML代码输出。 单引号里面的不进行解释&#xff0c;直接输出。单引号解析的时间比双引号快 。单引号支持转义符,双引号支持的转…

php 判断ajax访问,PHP里判断是否Ajax请求

$.ajax({type: ‘POST’,url: ‘http://www.yourwebsite.com’,beforeSend: function (XMLHttpRequest) {XMLHttpRequest.setRequestHeader(“request_type”,”ajax”);},data: ‘testtest’,success: function(rs) {alert(‘ok’);}}});PHP代码&#xff1a;echo isset($_SERV…

discuz手机客户端java,Discuz!7.2让高级搜索更全面

Discuz! 7.2 调整了对帖子的高级搜索&#xff0c;使高级搜索的搜索选项更细化&#xff0c;覆盖面更广。一、高级搜索功能介绍高级搜索界面如下图所示&#xff1a;1、按作者&#xff1a;此处可以填写发帖作者全名&#xff0c;也可以使用通配符"*"&#xff0c;如填写&q…

php面向对象异常处理,PHP 错误和异常处理(下)

PHP 错误和异常处理(下)由 学院君 创建于9个月前, 最后更新于 7个月前版本号 #11723 views2 likes0 collects上篇我们讲了 PHP 中的错误报告和捕获&#xff0c;今天&#xff0c;我们来看看 PHP 程序中的异常处理。错误 vs. 异常错误与异常可以看作一对孪生兄弟&#xff0c;从严…

php设计者,PHP设计者---composer

Composer 是 PHP5以上 的一个依赖管理工具。它允许你申明项目所依赖的代码库&#xff0c;它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的&#xff0c;它涉及 "packages" 和 "libraries"&#xff0c;但它在每个项目的基础上进行管理&#…

java内部类练习题,学习笔记——Java内部类练习题

1.尝试在方法中编写一个匿名内部类。package com.lzw;public class AnonymityInnerClass {}class OuterClass4{public OutInterface doit(final String s){return new OutInterface(){private int i0;public int getValue(){System.out.println(s);return i;}public void f(){S…

php左边按钮右边显示,右侧操作按钮

## 方法原型&#xff1a;addRightButton($type , $title , $url , $linkType link, $attr [])> 关于按钮的详细说明请参考[按钮操作](./按钮操作.md)一节。> 注意: 添加操作按钮必须在添加列时添加操作栏一列, 否则即使加了右侧按钮也不会显示## 参数说明&#xff1…

电脑运行java游戏,电脑运行软件卡顿?这几招游戏或是办公,让你速度飞起!...

许多朋友想知道他们已经购买了高端计算机&#xff0c;但是无论玩游戏还是运行软件&#xff0c;他们仍然陷于困境。今天&#xff0c;让我们教大家一个简单的方法来提高计算机性能。焦点&#xff1a;此方法大大提高了用户对高度配置的计算机的影响。如果计算机的设置不太高&#…

c matlab 数据类型,matlab中数据类型与c语言数据类型的区别?

matlab中数据类型与c语言数据类型的区别&#xff1f;mip版 关注:233 答案:3 悬赏:0解决时间 2021-02-23 08:46已解决2021-02-22 22:32matlab中数据类型与c语言数据类型的区别&#xff1f;最佳答案2021-02-22 22:42简单谈一下。1.好多类型是对应的。输入一个数&#xff0c;ma…

mie散射粒子消光系数 matlab代码,一种球形粒子GMie散射效率极值的算法

一种球形粒子G Mie散射效率极值的算法【专利摘要】球形粒子的G?Mie散射问题属于物理光学领域&#xff0c;涉及光与原子的相互作用。G?Mie理论在有着广泛的用途&#xff0c;如分析激光衍射粒度&#xff0c;光镊&#xff0c;激光制冷&#xff0c;大气理论和温室效应分析等。目前…

oracle util_mail,Oracle UTL_MAIL邮件包程序使用实践

在《使用包实现存储过程邮件发送》(http://space.itpub.net/17203031/viewspace-700327)中&#xff0c;笔者已经初步介绍了使用UTL_MAIL包实现系统邮件发送功能。UTL_MAIL包较传统的PL/SQL邮件发送已经有很大改进和简化。但是对于一般系统而言&#xff0c;邮件功能设置(如发送、…

oracle+内存错误,oracle使用内存的错误,ORA-27102: out of memory

网上参阅资料&#xff0c;整理到这里&#xff0c;以备查阅。主要由于内存的分配问题&#xff0c;导致oracle数据库启动失败。数据库关闭之后重新启动&#xff0c;出现下面的错误&#xff1a;SQL> startup;ORA-27102: out of memoryLinux-x86_64 Error: 28: No space left on…