:: -> php

在学习中遇到了一下问题

以下两种写法,在学习后都是可以的

$list =article::order('id','desc')->paginate(5);

$ar=new article();
$list =$ar->order('id','desc')->paginate(5);

以下的写法都是错误的:

写法1:$list =article->order('id','desc')->paginate(5);

写法2:$list =article::order('id','desc')::paginate(5);

通过查阅以下资料分析

php中的::是调用类中的静态方法或者常量,属性的符号

article 为未实例化对象在引用其order 方法时必须使用::否则需要先实例化对象

而在写法2中前面已经使用:: 对对象进行了实例化,此时必须使用->引用方法

总结::引用未实例化对象并相当于对其进行了实例化操作,而->必须调用已经实例化的对象。

ps:=>比较简单在初学时可以将其理解为=
例如
class aaa{
     static function ar(){
    }
    function br(){}
}

使用非静态方法,要先创建实例
$obj = new aaa();
$obj -> br();

使用静态方法,无需创建实例,直接使用类名
aaa::ar();

在类里面的时候,$this->func()和self::func()没什么区别。
在外部的时候,->必须是实例化后的对象使用; 而::可以是未实例化的类名直接调用。
举个例子:
class Mytest{
function ccc($str){
echo $str;
}
}
Mytest::ccc("123456");
$object = new Mytest();
$object->ccc("123456");

追问

是不是说实例化的类不能使用::?
而未实例的类可不可以使用->呢?

追答

你用我的例子,分别试一下Mytest->ccc("->")和$object::ccc("::")就知道答案了。(都会报错)

里看到明确的说明了:
静态属性不可以由对象通过->操作符来访问。
用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。

转载请注明出处:

转载自http://lxfamn.cn/blog

未经允许不得转载:lxfamn » :: -> php

赞 (0) 打赏

置顶推荐

评论 0

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏