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 相关文章推荐
浅谈Windows下 PHP4.0与oracle 8的连接设置
Oct 09 PHP
一个简单的PHP入门源程序
Oct 09 PHP
一个PHP+MSSQL分页的例子
Oct 09 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
PHP系统命令函数使用分析
Jul 05 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
在php中设置session用memcache来存储的方法总结
Jan 14 PHP
PHP将URL转换成短网址的算法分享
Sep 13 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
初中优秀教师事迹材料
2014/08/18 职场文书
党支部对照检查材料
2014/08/25 职场文书
发票退票证明
2015/06/24 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
python实现会员信息管理系统(List)
2022/03/18 Python