逍遥游

php中访问类成员为什么没有$符号

没有系统的学过php,对它的语法也就不甚了解。得益于c系列的语法大致相同,一直也没碰到什么大的问题,但这次却因为一个基本语法折腾了半天。

不知道从第几版开始,php引入了面向对象。前两天想把几个功能封装成一个对象,结果在调用的时候出了错,错误日志提示 “PHP Notice: Undefined variable”。

类定义

1
2
3
4
5
6
7
8
9
10
11
12
class A{
private $mysqli;
function init(){
$mysqli = ...;
}
function execute($sql, $params, $param_types){
$stmt =  $mysqli->prepare($sql);
//... 
}
}

调用就不写了,开始没注意到这里,一直在别的地方找原因,最后才定位到这,仔细检查,没什么问题啊。最后经过漫长的折磨,终于找到原因。
正确的的类定义应该这么写

1
2
3
4
5
6
7
8
9
10
11
12
class A{
private $mysqli;
function init(){
this->mysqli = ...;
}
function execute($sql, $params, $param_types){
$stmt =  this->mysqli->prepare($sql);
//...
}
}

首先,访问类内成员必须要加this修饰,其次访问类内成员没有$。

原因如下:
php系解释型语言,由于以前没有oop,所以以“$”开头的会被认为是对象,解释时用value替换掉,所以在oop中会解释变成“类变量->常量”,这显然不存在该成员,所以访问类成员变量时不需要也不可以添加“$”符号。另外访问类成员必须加this修饰,否则会被认为是局部变量。

php是一门灵活的语言,但是再灵活,也会有一些不够灵活的地方,还是要系统的学一学呀,凡事不能想当然。


多说停止服务,disqus引导注册太过分,暂时不上评论系统了。有机会自己造轮子吧。邮箱:input@newnius.com