2009-11-26 2 views
3

Эта вещь прослушивала меня долго, и я не могу найти ее нигде!В чем разница между -> и :: в PHP?

В чем разница при использовании классов в PHP между :: и ->

Позвольте мне привести пример.

Представьте себе класс с именем MyClass, и в этом классе есть функция туРипсЫоп

В чем разница между использованием:

MyClass myclass = new MyClass 
myclass::myFunction(); 

или

MyClass myclass = new MyClass 
myclass->myFunction(); 

Спасибо

ответ

2

, как указано, "::" для статических вызовов методов в то время как "->" является, например, метод вызывает

за исключением случаев использования parent :: для доступа к функциям в базовом классе, где «parent ::» может использоваться как для статических, так и для нестатических родительских методов

abstract class myParentClass 
{ 
    public function foo() 
    { 
     echo "parent class"; 
    } 
} 

class myChildClass extends myParentClass 
{ 
    public function bar() 
    { 
     echo "child class"; 
     parent::foo(); 
    } 
} 

$obj = new myChildClass(); 
$obj->bar(); 
11
MyClass::myFunction(); // static method call 

$myclass->myFunction(); // instance method call 
+0

Итак, 'myclass :: myFunction();' compile, и если да, что это значит? – Oskar

+0

Я просто попробовал это и $ myclass :: myFunction() не анализирует php - это хорошо, поскольку по определению статический метод не должен запускаться из экземпляра. –

+0

Это имеет смысл, но вы никогда не знаете с PHP ... :) – Oskar

3

«::» предназначен для вызова статических методов в классе. Таким образом, вы можете использовать:

MyClass::myStaticFunction() 

но не:

MyClass->myStaticFunction() 
0
class MyClass { 
    static function myStaticFunction(...){ 
    ... 
    } 

} 

//$myObject=new MyClass(); it isn't necessary. It's true?? 

MyClass::myStaticFunction();