PHP类与对象详细介绍
基本概念
class
每个类的定义都以关键字class开头,后面跟着类名,类名后面跟着一对花括号,里面包含有类的属性与方法的定义。
类名可以是任何非PHP保留字的合法标签。一个合法类型以字母或下划线开头(但不能一数字开头),后面跟着若干字母、数字、下划线。以正则表达式为:[a-zA-Z_][a-zA-Z0-9]*。
一个类可以包含有属于自己的常量、变量(成为“属性”)以及函数(成为“方法”)。
Example # 1简单的类定义:
<?phpclass SimpleClass{// 声明属性public $var = 'a default value';// 声明属性public function desplayVar(){echo $this->var;}}
?>
当一个方法在类内部定义被调用时,有一个可以用的伪变量$this。$this代表调用其所在的那个方法的对象本身。
Example # 2$this伪变量的示例:
<?phpclass A{function foo(){if(isset($this)){echo '$this is defined (';echo get_class($this);// get_class()函数返回对象的类名echo ")\n";}else{echo "\$this is not defined.\n"; }}}$a = new A();$a->foo();
?>以上列子输出结果为:$this is defined (A)
new
要创建一个类的实例,必须使用关键字new。
如果在new之后跟着的是一个包含有类名的字符串string,则该类的实例的一个实例被创建。如果该类属于命名空间,则必须使用其完整名称。
Example # 3创建实例
<?php// new关键字后面直接跟类名$instance = new A();// 也可以这样做$className = 'A';$instance = new $className(); // A()// 这两种方法都可以创建一个instance实例。// 输出:$this is defined (A)
?>
Example # 4对象赋值
<?phpclass SimpleClass{ // 声明属性 public $var = 'a default value'; // 声明属性 public function desplayVar(){ echo $this->var; } }$instance = new SimpleClass();$assigned = $instance;$refernce = &$instance;$instance->var = '$assigned will have this value';$instance = null; // $instance and $reference become nullvar_dump($instance);var_dump($refernce);var_dump($assigned);
?>
输出内容如下:NULLNULLobject(SimpleClass)#1 (1) {["var"]=>string(30) "$assigned will have this value"}
PHP符号: “ ::”
php中的::是调用类中的静态方法或者常量,属性的符号。使用“::”无需创建实例,可直接使用类名。
属性
类的变量成员叫做“属性”,或者“字段”、“特征”,在本文档统一称为“属性”。属性声明是由关键字public,protected或者private开头,然后跟着一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是常数。
提示:如果直接使用var声明属性,而没有用public,protected或者private之一,PHP5会将其视为public。
在内的成员方法里面,可以使用->(对象运行符):$this->property(其中property)是该属性名这种方式来访问非静态属性。静态属性则使用“::”(双冒号):self:$property来访问。稍后会详细介绍static关键字。
Example # 5
<?phpclass myClass{const constant = 'constant value';function showConstant(){echo $this::constant."\n";}}// 这里直接使用::符号来访问类中常量,无需创建实例echo myClass::constant;// 这里通过实例化的方式来访问类中的常量$c = new myClass();$c->showConstant();
?>
类常量
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用$符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算或函数调用。
Example # 6
<?phpclass myClass{const constant = 'constant value';function showConstant(){echo $this::constant."\n";}}// 这里直接使用::符号来访问类中常量,无需创建实例echo myClass::constant;// 这里通过实例化的方式来访问类中的常量$c = new myClass();$c->showConstant();
?>
类的自动加载
在编写面向对象(OOP)程序时,很多开发者为每个类新建一个PHP文件。这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个常常的列表(每个类都有个文件)。
在PHP5中,已经抱在需要这样了。spl_autoload_register()函数可以注册人员数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。
范围解析操作符 (::)
范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。
当在类定义之外引用到这些项目时,要使用类名。
在PHP5.3.0起,可以通过变量来引用类,该变量的值不能是关键字(如:self,static,parent等)。
Example # 7在内的外部使用::符号
<?phpclass myClass{const CONST_VALUE = 'A constant value';}$c = new myClass();// 自php5.3起,可以通过对象来访问echo $c::CONST_VALUE;echo myClass::CONST_VALUE;
Static(静态)关键字
声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
如果没有指定访问控制,属性和方法默认为公有。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
用静态方式调用一个非静态方法会导致一个 E_STRICT
级别的错误。
就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象。
PHP类与对象详细介绍相关推荐
- Wscript.Shell 对象详细介绍!!
系列文章分类 C#专栏.VBS专栏.JAVA 专栏.IDEA 专栏 Wscript.Shell 对象详细介绍!! 前言 一. WshShell 对象有关的属性. 二. WshShell 对象有关的方法 ...
- Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法
Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...
- java intent bundle_Android 通过Intent使用Bundle传递对象详细介绍
Android 通过Intent使用Bundle传递对象 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化, ...
- java栈 类 堆_详细介绍Java中的堆和栈
栈与堆都是Java用来在RAM中寄存数据的中央.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运转时数据区,类的对象从中分配空间.这些对象经过new.newar ...
- Java类与对象详细讲解(上)
目录 一.类与对象的概念 1.1 什么是面向对象 1.2 什么是对象 1.3 什么是类 二.类与对象的定义 2.1 类的创建 2.2 对象的创建 2.3 练习创建两个dog对象,定义其属性 ...
- PHP中的类与对象详细解读
1. 类与对象 类是面向对象程序设计的基本概念,是一类东西的结构描述 , 是一种抽象的概念 . 对象是一类东西的一个具体的实例 , 是具体事物 . 对象通过new关键字进行实例化: 比如汽车可以抽象为 ...
- C++类和对象详细总结
目录 目录 类与对象概念 什么是对象 什么是类 什么是方法: 自定义类型(类的关键字:class) 定义类的格式 封装 类的特性 访问权限以及访问限定符 struct 定义的类和class定义的类的区 ...
- 用例图、活动图、时序图、类图的详细介绍
UML软件开发模型的组成包括:功能模型,动态模型以及静态模型.其中,功能模型主要指的是用例图,用来描述每个用户的职责以及其可能发出的动作:动态模型包括分析图,顺序图,主要用来描述用户的行为动作之间的先 ...
- java URL java.net.URL类的使用 详细介绍 URL转义 解决URL中文字符
类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,也就是我们常说的域名.浏览器访问地址. 在Java中就 ...
最新文章
- 当当大促的额外优惠来啦!160 买 400的书!搓搓搓~
- 计算机二级7月考试,2020年计算机二级MS Office考试每日一练(7月27日)
- 黑马 程序员——Java基础---流程控制
- 小学二年几手工计算机的制作,小学二年级创意手工制作方法
- 如果你们都忘记了鼓励原创,那,我们来 - 2017年度原创IT博主全网评选
- F:Maximum White Subtree(树形dp)
- Struts2学习第三课 Struts2详解
- JAVA-date(计算时间差)
- bootstrap与jQuery结合的动态进度条
- 查看CUDA和cuDNN的版本号
- ICLR2021有什么值得关注的投稿?这些高赞论文先睹为快
- matlab牛顿差值法函数,matlab牛顿插值函数
- Pytorch实现FGSM(Fast Gradient Sign Attack)
- ad转3d视图快捷键_AD工具快捷键
- jquery图片懒加载函数
- PowerDesigner和PDMan数据库表设计工具的简单使用
- 电脑提示ISDone.dll错误怎么办?
- S4 BP供应商批导
- BAT替换文件中指定字符串
- FPGA云原生 Xilinx FPGA_as_a_Service 概述
热门文章
- JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
- 怎么在endnote中添加目标期刊参考文献的style
- 苹果手机IAP2协议Lightning转串口uart使用说明
- python漫画滤镜怎么实现的_基于Python实现的ComicReaper漫画自动爬取脚本
- Screen/Tmux/Byobu分屏工具的使用 ( by quqi99 )
- 图像算法OR音视频传输
- 电子电路图中VCC、IO、3V3OUT、VDD3V3解释
- 帆软js--FR对象中Msg提示框使用
- WCF分布式开发常见错误(18):Binding validation failed 绑定协议验证失败
- 使用Scala编写Spark程序求基站下移动用户停留时长TopN