<?php
class Person {
// var $name;
// var $sex;
// var $age;
function __construct($name='', $sex='男', $age=1)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function say(){
echo "我的名字:" .$this->name. ", 性别: ".$this->sex. ", 年龄:" .$this->age;
}
}
$person1 = new Person('张三', '女', 20);
$person1->say();
问题如下:
- 当构造函数里面的三个变量存在(不被注释掉时)var $name; var $sex; var $age;, 实例化对象后调用对象能正常输出. 这个很好理解, 在对象内部, 方位对象属性, 使用$this.
- 但是删除或注释掉构造函数里面的三个变量后, 这段代码还能正常输出.
很纳闷, 删掉之后, 这个类里面不是没有对象属性了吗? 为什么构造方法内还能使用$this进行访问呢?
好像有点明白了.之前看的视频, 自己把$this, $self 和 ->, :: 都看成一种访问对象成员的方式和符号.
实际上, $this和$self 是用来指代对象名称的.在对象内部访问对象属性时, 在实例化对象之前, 还不知道对确切的对象名, 所以就设计了"$this"这个关键词.
等到之后在对象外部实例化出来的对象名称是啥, $this就指代啥.
刚学到php面向对象, 很多不懂, 不知道这里的理解是否有偏差, 恳请大家指正和帮忙. 谢谢了.
php可以动态读写属性(你说的变量,那个叫属性),不定义也可以,但是不推荐这么用。
然后var 定义写法也不推荐用了,非常古老。建议使用
public/private/protected
$this
是针对new
出来的对象static::
、self::
是无需实例化new
就可以用