我正在浏览一些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();
提前致谢
答案 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
在您的情况下,它调用的类方法不依赖于特定实例。