PHP 面向对象程序设计之类属性与类常量实现方法分析


Posted in PHP onApril 13, 2020

本文实例讲述了PHP 面向对象程序设计之类属性与类常量。分享给大家供大家参考,具体如下:

属性 (Properties)

类的变量成员叫做“属性”,或者叫“字段”、“特征”,在本文档统一称为“属性”。属性声明是由关键字 public,protected或者 private 开头,然后跟一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。

有关 public,protected 和 private 的更多详细信息,请查看访问控制(可见性)。

Note:

为了向后兼容 PHP 4,PHP 5 声明属性依然可以直接使用关键字 var 来替代(或者附加于)public,protected 或private。但是已不再需要 var 了。在 PHP 5.0 到 5.1.3,var 会被认为是废弃的,而且抛出 E_STRICT 警告,但是 5.1.3 之后就不再认为是废弃,也不会抛出警告。

如果直接使用 var 声明属性,而没有用 public,protected 或 private 之一,PHP 5 会将其视为 public。

在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。静态属性则是用 ::(双冒号):self::$property 来访问。更多静态属性与非静态属性的区别参见 Static 关键字。

当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象静态调用时也可能是另一个对象)。

属性声明以及调用

<?php
class SimpleClass
{
  // 错误的属性声明
  public $var1 = 'hello ' . 'world';
  public $var2 = <<<EOD
hello world
EOD;
  public $var3 = 1+2;
  public $var4 = self::myStaticMethod();
  public $var5 = $myVar;

  // 正确的属性声明
  public $var6 = myConstant;
  public $var7 = array(true, false);

  //在 PHP 5.3.0 及之后,下面的声明也正确
  public $var8 = <<<'EOD'
hello world
EOD;
  // 属性调用
  public getvar1() {
    echo $this->var1;
  }
}

$simpleObject = new $SimpleClass();
// 对象调用属性
echo $simpleObject->var1;  // 输出 "hello world"

类常量 (Class Constants)

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。

常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。

接口(interface)中也可以定义常量。更多示例见文档中的接口部分。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

定义和使用一个类常量

<?php
class MyClass
{
  const constant = 'constant value';

  function showConstant() {
    echo self::constant . "\n";
  }
}

echo MyClass::constant . "\n";

$classname = "MyClass";
echo $classname::constant . "\n"; // 自 5.3.0 起

$class = new MyClass();
$class->showConstant();

echo $class::constant."\n"; // 自 PHP 5.3.0 起

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
谈谈关于php的优点与缺点
Apr 11 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
深入理解php的MySQL连接类
Jun 07 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
PHP重载基础知识回顾
Sep 10 PHP
PHP大文件分割分片上传实现代码
Dec 09 PHP
PHP 对象接口简单实现方法示例
Apr 13 #PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 #PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 #PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 #PHP
php回调函数处理数组操作示例
Apr 13 #PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 #PHP
laravel使用数据库测试注意事项
Apr 10 #PHP
You might like
php中目录,文件操作详谈
2007/03/19 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
js实现烟花特效
2020/03/02 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
会计专业应届生自荐信
2014/06/28 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
2015年团支部工作总结
2015/04/03 职场文书
清明节随笔
2015/08/15 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python