self 是关键字,而 $this 是一个变量,表示当前对象,也就是你能直接把 $this 返回实现链式调用.
$this->foo 也是一个变量,表示当前对象里名为 foo 的成员.
而 self::$foo 表示类里面名为 foo 的变量.
self 其实就相当于类名,parent 相当于父类名,都是在类里面使用的关键字.
<?php
class foo {
const a = '类的常量'; // PHP 5.3
public static $b = '类的静态变量';
public $c = '对象的变量';
// 类的普通方法既能访问静态变量,也能访问普通变量.
// 而类的静态方法不能访问类的非静态变量和非静态方法.
public function bar() {
return array(
self::a,
self::$b,
$this->c
);
}
}
$foo = new foo();
echo foo::a . "\n"; // 类的常量
echo foo::$b . "\n"; // 类的静态变量
echo $foo->c . "\n"; // 对象的变量
var_export($foo->bar()); // 输出:
输出的内容如下:
array (
0 => '类的常量',
1 => '类的静态变量',
2 => '对象的变量',
)