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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
php 表单数据的获取代码
Mar 10 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php注册审核重点解析(数据访问)
May 23 PHP
PHP autoload使用方法及步骤详解
Sep 05 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随机数生成代码与使用实例分析
2011/04/08 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python中splitlines()方法的使用简介
2015/05/20 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
python如何建立全零数组
2020/07/19 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
部队学习十八大感言
2014/01/11 职场文书
超市5.1促销活动
2014/01/15 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
运动会加油稿30字
2015/07/21 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL