一般情况下,在类中要使用一个属性,最好是先申明这个属性。否则就是给自己的挖坑了。
先来看以下一段代码,

<?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类中使用未定义的属性说明相关推荐

  1. (二)线程同步_3---在类中使用相互独立的属性同步

    2019独角兽企业重金招聘Python工程师标准>>> 在类中使用相互独立的属性同步 当使用synchronized关键字去同步一个代码块时,我们必须传递一个引用,通常情况下可以使用 ...

  2. 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe

    题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...

  3. 不同派生方式下基类成员在派生类中的可访问范围属性

    不同派生方式下基类成员在派生类中的可访问范围属性 派生方式 派生方式 派生方式 基类成员 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问 不可访问 保护成员 保护 私有 保护 公有成员 公 ...

  4. 使用proxy来调用未定义的属性方法

    当我们调用一个函数的未定义属性时会报错.那么可以使用一个proxy拦截,并且传入dispatch函数,来使当调用未定义属性时,执行dispatch函数. 原理: 创建一个实例:function cre ...

  5. CSS中的未定义行为,浏览器的差异(一)

    今天看了张鑫旭大佬的新书的有感吧,记录一下. Web标准未对一些场景做出明确规范,所以各大浏览器厂家只能根据自己的理解和喜好去实现,表现差异不是浏览器的bug,用计算机领域的术语描述为"未定 ...

  6. php属性未定义,PHP-警告-未定义的属性:stdClass-修复?

    我在错误日志中收到此警告,并想知道如何在代码中更正此问题. 警告:PHP注意:未定义属性:stdClass :: $ records在440行的script.php中 一些代码: // Parse o ...

  7. C程序中的未定义行为(Undefined Behavior)

    什么是UB LLVM IR和C语言中都有UB的概念.很多在C语言中看似合理的事都可能导致UB,UB是代码中很多BUG的源泉. UB在C或类C语言中存在的原因是因为追求极致的性能.类似JAVA之类的语言 ...

  8. java中方法未定义_java - Java SE中的未定义方法错误 - 堆栈内存溢出

    我为该问题写了一个代码http://www.spoj.com/problems/PRIME1/ ,该代码的作用是将输入以字符串形式输入,然后将split()拆分为两个整数,并存储在该数组中.然后返回到 ...

  9. C++中的未定义的行为

    2.1 位运算 位运算的运算对象是整数类型的,并且把运算对象看成是一个二进制位的集合.运算对象可以是带符号也可以是无符号.如果是带符号且值为负,那么位运算如何处理运算对象的符号位依赖于机器.而且此时的 ...

最新文章

  1. VSCode设置折叠左侧资源管理器所有文件夹的快捷键Alt+X、切换左侧活动栏显示隐藏快捷键Alt+Q
  2. OpenCV ORB角点检测
  3. mysql主从配置笔记_MySQL主从配置学习笔记
  4. 【TensorFlow-windows】keras接口——BatchNorm和ResNet
  5. tcp中的crc检验算法原理_在数据传输过程中的CRC 算法的简单说明
  6. package.json说明
  7. python定义一个整数变量_python循环定义多个变量的实例分析
  8. docker 远程访问_Docker 与其守护进程
  9. 数据结构:从插入排序到希尔排序
  10. 虚拟机ubuntu 网速慢的解决方法
  11. 打开计算机管理时,提示找不到Apphelp.dll
  12. 论文笔记《BERT》
  13. 计算机课外兴趣小组活动教案,科技兴趣小组教案
  14. c语言求解一元二次方程的复根,c语言 求一元二次方程的根(含复根)
  15. Work Breakdown Structure
  16. 计算机网络英语版答案,计算机网络试卷英语版
  17. 高德地图-2D转换为3D
  18. jy-12-SPRINGMYBATIS02——云笔记09-刘苍松
  19. 织梦模板之家:如何安装更换织梦cms模板
  20. 市场调研你所不知道的几个关键点

热门文章

  1. 《精彩绝伦的CSS》——布局(二)居中块状框
  2. 搜狗浏览器账号登录不了——解决方案
  3. ADAMS 机构优化
  4. 云转码express-ffmpeg+CMS一体化系统安装教程
  5. Vue项目中报错error Indentifier ‘attr_id‘ is not in camel case解决方法如下
  6. 云计算中的第三个boss——存储虚拟化
  7. 抖音视频消重软件 视频修改md5 剪辑片头
  8. Redis-三种特殊的数据类型-geospatial
  9. 龙讯旷腾并行科技签署战略合作协议,将PWmat加入以北京超级云计算中心算力资源为“基座”的超算云平台
  10. Vue实现仿淘宝商品详情属性选择的功能