Разница между :: и -> в вызове функции класса в php - PullRequest
0 голосов
/ 24 июля 2010

Я видел функцию, вызванную из классов php с помощью :: или ->.

Например:

$ classinstance :: function или $ classinstance-> function

whatsразница?

Ответы [ 6 ]

2 голосов
/ 24 июля 2010

:: используется для разрешения области действия , для доступа (обычно) статических методов, переменных или констант, тогда как -> используется для вызова методов объекта или доступ к свойствам объекта в конкретном экземпляре объекта.

Другими словами, типичный синтаксис ...

ClassName::MemberName

против ...

$Instance->MemberName

В редких случаях, когда вы видите $variable::MemberName, на самом деле происходит то, что содержимое $variable обрабатывается как имя класса , поэтому $var='Foo'; $var::Bar эквивалентно Foo::Bar .

http://www.php.net/manual/en/language.oop5.basic.php

http://www.php.net/manual/language.oop5.paamayim-nekudotayim.php

1 голос
/ 24 июля 2010

Пример:

class FooBar {
    public function sayHi() { echo 'Hi!'; }
    public /* --> */ static /* <-- */ function sayHallo() { echo 'Hallo!'; }
}

// object call (needs an instance, $foobar here)
$foobar = new FooBar;
$foobar->sayHi();

// static class call, no instance required
FooBar::sayHallo(); // notice I use the plain classname here, not $foobar!

// As of PHP 5.3 you can write:
$nameOfClass = 'FooBar'; // now I store the classname in a variable
$nameOfClass::sayHallo(); // and call it statically

$foobar::sayHallo(); // This will not work, because $foobar is an class *instance*, not a class *name*
1 голос
/ 24 июля 2010

Синтаксис :: означает, что вы вызываете статический метод.Принимая во внимание, что -> не является статичным.

MyClass{

  public function myFun(){  
  }

  public static function myStaticFun(){
  }

}

$obj = new MyClass();

// Notice how the two methods must be called using different syntax
$obj->myFun();
MyClass::myStaticFun();
0 голосов
/ 24 июля 2010

С помощью :: вы можете получить доступ к константам, атрибутам или методам класса ;переменные и методы должны быть объявлены как статические, иначе они принадлежат экземпляру, а не классу.

И с помощью -> вы можете получить доступ к атрибутам или методам экземпляра класса.

0 голосов
/ 24 июля 2010

:: обычно используется для вызова статических методов или констант класса .(другими словами, вам не нужно создавать экземпляр объекта с помощью new), чтобы использовать метод.И -> - это когда вы уже создали экземпляр объекта.

Например:

Validation::CompareValues($val1, $val2);

$validation = new Validation;
$validation->CompareValues($val1, $val2);

Как примечание, любой метод, который вы пытаетесь использовать как статический (или с ::) должно иметь ключевое слово static, используемое при его определении.Прочитайте различные страницы документации PHP.net, на которые я ссылался в этом посте.

0 голосов
/ 24 июля 2010

:: function предназначена для статических функций и должна фактически использоваться как:

class :: function () вместо $ instance :: function (), как вы предлагаете.

Youтакже можно использовать

class :: function ()

в подклассе для ссылки на методы родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...