PHP使用静态方法的几个注意事项


Posted in PHP onSeptember 16, 2014

本文实例介绍了PHP使用静态方法的几个常见注意事项。分享给大家供大家参考。具体方法如下:

1. 即使类中的方法并未用static声明,但其未使用到可改变的类成员变量,在外部仍可用操作符::来调用

2. 以静态方式(用::操作符)调用的方法中$this的取值是由调用时的上下文决定的!而不是定义他的类!!

例如以下的代码:

<?php 
class TestClass1 
{ 
  public $normal_v = 'normal_v from TestClass1'; 
  public static $STATIC_V = 'STATIC_V from TestClass1'; 
  public function test_func1() 
  { 
    echo $this->normal_v.'<br />'.self::$STATIC_V; 
  } 
} 
class TestClass2 
{ 
  public $normal_v = 'normal_v from TestClass2'; 
  public static $STATIC_V = 'STATIC_V from TestClass2'; 
  public function test_func2() 
  { 
    TestClass1::test_func1(); 
  } 
} 
$t2 = new TestClass2(); 
$t2->test_func2();

这段代码是输出会是什么呢,我原以为会是normal_v from TestClass1 <br /> STATIC_V from TestClass1,测试发现其实我错了,正确的输出是:

normal_v from TestClass2
STATIC_V from TestClass1

说明:test_func1()虽然是在TestClass1中定义的,但却是在TestClass2中调用的,其内部的$this变量则是由TestClass2决定的!

其实这两个类的关系应该属于"双向关联".

感兴趣的朋友可以测试运行本文实例,相信会有新的收获!

PHP 相关文章推荐
php连接数据库代码应用分析
May 29 PHP
PHP 第二节 数据类型之数组
Apr 28 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
深入解析PHP的Yii框架中的event事件机制
Mar 17 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
thinkPHP模板引擎用法示例
Dec 08 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 #PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 #PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 #PHP
php修改指定文件后缀的方法
Sep 11 #PHP
MyEclipse常用配置图文教程
Sep 11 #PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 #PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 #PHP
You might like
深入PHP数据加密详解
2013/06/18 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
js实现简单点赞操作
2020/03/17 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
python3.0 字典key排序
2008/12/24 Python
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python队列的定义与使用方法示例
2017/06/24 Python
Python3匿名函数用法示例
2018/07/25 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python3 反射的四种基本方法解析
2019/08/26 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
UNIX文件系统分类
2014/11/11 面试题
公司节能减排方案
2014/05/16 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
酒店宣传语大全
2015/07/13 职场文书