我知道有两种方法可以访问PHP类 - "::"和" - >".有时一个似乎对我有用,而另一个没有,我不明白为什么.
每种方法的好处是什么,使用哪种方式都是正确的?
Pet*_*ley 59
简而言之,::
适用于类级属性,->
适用于对象级属性.
如果属性属于该类,请使用 ::
如果属性属于该类的实例,请使用->
class Tester
{
public $foo;
const BLAH;
public static function bar(){}
}
$t = new Tester;
$t->foo;
Tester::bar();
Tester::BLAH;
Run Code Online (Sandbox Code Playgroud)
"::"符号用于访问已使用static关键字声明的对象的方法/属性," - >"用于访问表示实例方法/属性的对象的方法/属性.
PHP 在这方面可能会令人困惑,您应该阅读此内容。
同样令人困惑的是,您可以使用 :: 符号调用非静态函数。当你来自 Java 时,这会很奇怪。当我第一次看到它时,它确实让我感到惊讶。
例如:
class Car
{
public $name = "Herbie <br/>";
public function drive()
{
echo "driving <br/>";
}
public static function gas()
{
echo "pedal to the metal<br/>";
}
}
Car::drive(); //will work
Car::gas(); //will work
$car = new Car();
$car->drive(); // will work
$car->gas(); //will work
echo $car->name; // will work
echo Car::$name; // wont work error
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,静态在 php 中是非常宽松的。您可以使用 -> 和 :: 符号调用任何函数。但是当您使用 :: 调用时有一个区别,没有 $this 对实例的引用。请参阅手册中的示例#1 。
当您声明一个类时,它默认是“静态”的。您可以使用运算符在任何范围内访问该类中的任何方法::
。这意味着如果我创建一个 lib 类,我可以在任何我想要的地方访问它,并且不需要全局化:
class lib
{
static function foo()
{
echo "hi";
}
}
lib::foo(); // prints hi
Run Code Online (Sandbox Code Playgroud)
现在,当您使用关键字创建此类的实例时new
,您可以->
访问方法和值,因为您引用的是该类的特定实例。你可以认为->
是inside of
。(注意,必须去掉static关键字)IE:
class lib
{
function foo()
{
echo "hi";
}
}
$class = new lib;
$class->foo(); // I am accessing the foo() method INSIDE of the $class instance of lib.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8210 次 |
最近记录: |