基本概念

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类与对象详细介绍相关推荐

  1. Wscript.Shell 对象详细介绍!!

    系列文章分类 C#专栏.VBS专栏.JAVA 专栏.IDEA 专栏 Wscript.Shell 对象详细介绍!! 前言 一. WshShell 对象有关的属性. 二. WshShell 对象有关的方法 ...

  2. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  3. java intent bundle_Android 通过Intent使用Bundle传递对象详细介绍

    Android 通过Intent使用Bundle传递对象 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化, ...

  4. java栈 类 堆_详细介绍Java中的堆和栈

    栈与堆都是Java用来在RAM中寄存数据的中央.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运转时数据区,类的对象从中分配空间.这些对象经过new.newar ...

  5. Java类与对象详细讲解(上)

    目录 一.类与对象的概念 1.1  什么是面向对象 1.2  什么是对象 1.3  什么是类 二.类与对象的定义 2.1  类的创建 2.2  对象的创建 2.3  练习创建两个dog对象,定义其属性 ...

  6. PHP中的类与对象详细解读

    1. 类与对象 类是面向对象程序设计的基本概念,是一类东西的结构描述 , 是一种抽象的概念 . 对象是一类东西的一个具体的实例 , 是具体事物 . 对象通过new关键字进行实例化: 比如汽车可以抽象为 ...

  7. C++类和对象详细总结

    目录 目录 类与对象概念 什么是对象 什么是类 什么是方法: 自定义类型(类的关键字:class) 定义类的格式 封装 类的特性 访问权限以及访问限定符 struct 定义的类和class定义的类的区 ...

  8. 用例图、活动图、时序图、类图的详细介绍

    UML软件开发模型的组成包括:功能模型,动态模型以及静态模型.其中,功能模型主要指的是用例图,用来描述每个用户的职责以及其可能发出的动作:动态模型包括分析图,顺序图,主要用来描述用户的行为动作之间的先 ...

  9. java URL java.net.URL类的使用 详细介绍 URL转义 解决URL中文字符

    类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,也就是我们常说的域名.浏览器访问地址. 在Java中就 ...

最新文章

  1. 当当大促的额外优惠来啦!160 买 400的书!搓搓搓~
  2. 计算机二级7月考试,2020年计算机二级MS Office考试每日一练(7月27日)
  3. 黑马 程序员——Java基础---流程控制
  4. 小学二年几手工计算机的制作,小学二年级创意手工制作方法
  5. 如果你们都忘记了鼓励原创,那,我们来 - 2017年度原创IT博主全网评选
  6. F:Maximum White Subtree(树形dp)
  7. Struts2学习第三课 Struts2详解
  8. JAVA-date(计算时间差)
  9. bootstrap与jQuery结合的动态进度条
  10. 查看CUDA和cuDNN的版本号
  11. ICLR2021有什么值得关注的投稿?这些高赞论文先睹为快
  12. matlab牛顿差值法函数,matlab牛顿插值函数
  13. Pytorch实现FGSM(Fast Gradient Sign Attack)
  14. ad转3d视图快捷键_AD工具快捷键
  15. jquery图片懒加载函数
  16. PowerDesigner和PDMan数据库表设计工具的简单使用
  17. 电脑提示ISDone.dll错误怎么办?
  18. S4 BP供应商批导
  19. BAT替换文件中指定字符串
  20. FPGA云原生 Xilinx FPGA_as_a_Service 概述

热门文章

  1. JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  2. 怎么在endnote中添加目标期刊参考文献的style
  3. 苹果手机IAP2协议Lightning转串口uart使用说明
  4. python漫画滤镜怎么实现的_基于Python实现的ComicReaper漫画自动爬取脚本
  5. Screen/Tmux/Byobu分屏工具的使用 ( by quqi99 )
  6. 图像算法OR音视频传输
  7. 电子电路图中VCC、IO、3V3OUT、VDD3V3解释
  8. 帆软js--FR对象中Msg提示框使用
  9. WCF分布式开发常见错误(18):Binding validation failed 绑定协议验证失败
  10. 使用Scala编写Spark程序求基站下移动用户停留时长TopN