用于php的“::”表示法是什么?

时间:2011-06-11 03:00:25

标签: php

我正在浏览一些PHP代码,我看到这个“::”表示法,我不知道这意味着什么......还有什么&在电话会议前面

$mainframe =& JFactory::getApplication('site');
$sql="SELECT rt.member_id ,rt.commission,rt.sales,kt.store_id,kt.user_id FROM jos_report
rt JOIN jos_kingdom_tickets kt WHERE rt.member_id=kt.ticket_id";
$db =& JFactory::getDBO();

提前致谢

4 个答案:

答案 0 :(得分:24)

::, the scope resolution operator,用于引用类的静态成员和常量。它还用于引用超类的构造函数。下面是一些代码,说明了范围解析运算符的几种不同用法:

<?php
class A {
    const BAR = 1;
    public static $foo = 2;
    private $silly;

    public function __construct() {
         $this->silly = self::BAR;
    }
}

class B extends A {
    public function __construct() {
        parent::__construct();
    }

    public static function getStuff() {
         return 'this is tiring stuff.';
    }
}

echo A::BAR;
echo A::$foo;
echo B::getStuff();
?>

一个小小的琐事:范围分辨率算子也被称为“paamayim nekudotayim”,这意味着希伯来语中的“两个点两次”。

如果您使用的是php 5或更高版本,那么在您的示例上下文中的

&没有做任何有用的事情,应该删除它。在php 4中,这是必要的,以确保没有使用返回对象的副本。在php 5中,除非调用clone,否则不会创建对象副本。因此不需要&。还有一种情况&在PHP 5中仍然有用:当您迭代数组的元素并修改值时,必须使用&运算符来影响数组的元素

答案 1 :(得分:3)

您可以使用它来引用类中的静态方法,而无需实例化它。

例如:

class myClass {

    public static function staticFunction(){
        //...
    }

    public function otherFunction(){
        //...
    }

}

在这里你可以在类之外使用myClass::staticFunction(),但是你必须在以同样的方式使用otherFunction()之前创建一个新的myClass对象。

答案 2 :(得分:2)

::是PHP,c ++中的范围运算符,但不是Java。在这种情况下,它用于调用类的静态方法。静态方法是一种可以从类外部调用的方法,即使你没有它的实例也是如此。

&表示不是复制函数返回的内容,而是引用返回的对象。在这种情况下,它们似乎返回在应用程序中使用的单例对象,例如与数据库接口(在第二种情况下)

答案 3 :(得分:1)

它是范围运算符,用于引用类下的常量或静态方法。所以:

class C {
    const D = 2;
}

echo C::D; // 2

在您的情况下,它调用的类方法不依赖于特定实例。