php类中使用未定义的属性说明
一般情况下,在类中要使用一个属性,最好是先申明这个属性。否则就是给自己的挖坑了。
先来看以下一段代码,
<?php
class test_class{public function out(){$this->test = 8;return $this->test;}
}
$obj = new test_class();
echo $obj->out();
?>
这段代码的输出是:8。
这就说明了一个未定义的属性,是可以在类中正常使用的。这是因为:
在类中使用$this-> 调用一个未定义的属性时,PHP5会自动创建一个属性供使用。
这个被创建的属性,默认的方法权限是public。
之所以说是挖坑,是当程序中加入了__set()魔术方法后,就不能使用这么使用了。
<?php
class test_class{public function __set($property, $value) { }public function out(){$this->test = 8;return $this->test;}
}
$obj = new test_class();
echo $obj->out();
?>
这个代码的输出:PHP Notice: Undefined property: test_class::$test,然而也没有输出。
在 $this->test = 8;这行代码时,程序发现存在魔术方法__set(),就去调用这个魔术方法而不会自动创建,但不巧的是你的__set()里面什么都没有干,这个属性就没有被创建。在后面使用的时候就当然会出错了。
所以属性最后先定义,或者在__set()上定义它。
php类中使用未定义的属性说明相关推荐
- (二)线程同步_3---在类中使用相互独立的属性同步
2019独角兽企业重金招聘Python工程师标准>>> 在类中使用相互独立的属性同步 当使用synchronized关键字去同步一个代码块时,我们必须传递一个引用,通常情况下可以使用 ...
- 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe
题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...
- 不同派生方式下基类成员在派生类中的可访问范围属性
不同派生方式下基类成员在派生类中的可访问范围属性 派生方式 派生方式 派生方式 基类成员 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问 不可访问 保护成员 保护 私有 保护 公有成员 公 ...
- 使用proxy来调用未定义的属性方法
当我们调用一个函数的未定义属性时会报错.那么可以使用一个proxy拦截,并且传入dispatch函数,来使当调用未定义属性时,执行dispatch函数. 原理: 创建一个实例:function cre ...
- CSS中的未定义行为,浏览器的差异(一)
今天看了张鑫旭大佬的新书的有感吧,记录一下. Web标准未对一些场景做出明确规范,所以各大浏览器厂家只能根据自己的理解和喜好去实现,表现差异不是浏览器的bug,用计算机领域的术语描述为"未定 ...
- php属性未定义,PHP-警告-未定义的属性:stdClass-修复?
我在错误日志中收到此警告,并想知道如何在代码中更正此问题. 警告:PHP注意:未定义属性:stdClass :: $ records在440行的script.php中 一些代码: // Parse o ...
- C程序中的未定义行为(Undefined Behavior)
什么是UB LLVM IR和C语言中都有UB的概念.很多在C语言中看似合理的事都可能导致UB,UB是代码中很多BUG的源泉. UB在C或类C语言中存在的原因是因为追求极致的性能.类似JAVA之类的语言 ...
- java中方法未定义_java - Java SE中的未定义方法错误 - 堆栈内存溢出
我为该问题写了一个代码http://www.spoj.com/problems/PRIME1/ ,该代码的作用是将输入以字符串形式输入,然后将split()拆分为两个整数,并存储在该数组中.然后返回到 ...
- C++中的未定义的行为
2.1 位运算 位运算的运算对象是整数类型的,并且把运算对象看成是一个二进制位的集合.运算对象可以是带符号也可以是无符号.如果是带符号且值为负,那么位运算如何处理运算对象的符号位依赖于机器.而且此时的 ...
最新文章
- VSCode设置折叠左侧资源管理器所有文件夹的快捷键Alt+X、切换左侧活动栏显示隐藏快捷键Alt+Q
- OpenCV ORB角点检测
- mysql主从配置笔记_MySQL主从配置学习笔记
- 【TensorFlow-windows】keras接口——BatchNorm和ResNet
- tcp中的crc检验算法原理_在数据传输过程中的CRC 算法的简单说明
- package.json说明
- python定义一个整数变量_python循环定义多个变量的实例分析
- docker 远程访问_Docker 与其守护进程
- 数据结构:从插入排序到希尔排序
- 虚拟机ubuntu 网速慢的解决方法
- 打开计算机管理时,提示找不到Apphelp.dll
- 论文笔记《BERT》
- 计算机课外兴趣小组活动教案,科技兴趣小组教案
- c语言求解一元二次方程的复根,c语言 求一元二次方程的根(含复根)
- Work Breakdown Structure
- 计算机网络英语版答案,计算机网络试卷英语版
- 高德地图-2D转换为3D
- jy-12-SPRINGMYBATIS02——云笔记09-刘苍松
- 织梦模板之家:如何安装更换织梦cms模板
- 市场调研你所不知道的几个关键点
热门文章
- 《精彩绝伦的CSS》——布局(二)居中块状框
- 搜狗浏览器账号登录不了——解决方案
- ADAMS 机构优化
- 云转码express-ffmpeg+CMS一体化系统安装教程
- Vue项目中报错error Indentifier ‘attr_id‘ is not in camel case解决方法如下
- 云计算中的第三个boss——存储虚拟化
- 抖音视频消重软件 视频修改md5 剪辑片头
- Redis-三种特殊的数据类型-geospatial
- 龙讯旷腾并行科技签署战略合作协议,将PWmat加入以北京超级云计算中心算力资源为“基座”的超算云平台
- Vue实现仿淘宝商品详情属性选择的功能