Czy ktoś może odróżnić mysqli->commit
i mysqli::commit
?Różnica między "->" i "::" w PHP MySQLi OOP
Nagłówek w this page to mysqli::commit
, ale w przykładach używają one mysqli->commit
.
Czy ktoś może odróżnić mysqli->commit
i mysqli::commit
?Różnica między "->" i "::" w PHP MySQLi OOP
Nagłówek w this page to mysqli::commit
, ale w przykładach używają one mysqli->commit
.
->
służy gdy odnosi się do członek obiektu.
::
to Scope Resolution Operator i jest używany do oznaczania statycznego elementu klasy.
Rozważmy następujące klasy:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Można by wywołać funkcję buzz()
użyciu ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Ale użyłby ::
wezwać functon fizz()
, ponieważ jest członkiem statyczne (a członek, który nie wymaga wywołania klasy):
FooBar::fizz();
Ponadto, podczas gdy mówimy o różnicy między statycznych członków kontra instancja członków, nie można używać $this
odnoszą się do bieżącej instancji w ciągu statycznych członków. Zamiast tego używasz self
(bez wiodącego $
), który odnosi się do bieżącej klasy lub parent
, jeśli chcesz odwołać się do klasy nadrzędnej lub jeśli masz przyjemność pracować z PHP 5.3.0, static
(co pozwala na późniejsze wiązanie statyczne).
Dokumentacja wykorzystuje ::
odnieść się do funkcji wewnątrz klasy jako nazwa klasy w nagłówku nie jest instancją klasy. Nadal przy użyciu tego samego przykład wpis dokumenty odnoszące się do funkcji buzz()
użyłby następujący nagłówek:
FooBar::buzz
Ale chyba dokumentacja wskazuje, że jest to element statyczny, trzeba będzie użyć ->
na przykład nazwać:
$myFooBar = new FooBar();
$myFooBar->buzz();
:: uzyskuje dostęp do funkcji klasy bez instancji obiektu.
::
służy do metod statycznych.
->
służy do metody obiektu, jeśli już masz instancję.
Operatorem ->
jest dla obiektu właściwości obiektu.
Operator ::
jest dla właściwości klasy .
w mysqli-> popełnienia, mysqli jest instancją MySQLi w mysqli :: commit wywołać metody statycznej
Jeśli masz instancję obiektu, należy użyć -> odnosi się do metody wewnątrz tego instancja:
$foo = new Foo();
$foo->bar();
Korzystanie :: wywołuje metodę statyczną, bez konieczności utworzenia wystąpienia obiektu:
Foo::bar();
metoda statyczna nie może odnosić się do niego” s bieżące wystąpienie przez $this
, ale może odnosić się do siebie (aktualna klasa) przy użyciu self
.
Wywołanie nie statycznego elementu przy pomocy operatora zakres rozdzielczości podnosi E_STRICT w PHP <5.3.0 oraz E_WARNING w PHP> = 5.3.0. –
I "self" istnieje, aby odnieść się do obecnej klasy w kontekście statycznym. Nie odnosi się do instancji, ale do samego siebie: 'klasa A {funkcja statyczna b() {self :: c(); } prywatna funkcja statyczna c() {echo 'hello'; }}; ' –
mysqli-> commit jest funkcją publiczną, a mysqli :: commit jest statyczną funkcją, z której dwie są notacjami obiektów php klasy mysqli.
zwykle w dokumentacji php.net :: oznacza, że ta klasa ma tę metodę. W celu praktycznego użycia należy wykonać przykład, więc użyj -> sintax.
::
określa metodę statyczną (klasę), która jest wywoływalna bez faktycznego tworzenia obiektu. ->
określa metodę instancji (obiektu), dla której potrzebny jest obiekt utworzony w celu użycia.
Tak na przykład, jeśli miał zmienną $m
który był instancją klasy mysqli
, to nazwałbym commit
mówiąc $m->commit()
, czy można nazwać popełnić statycznie mówiąc MySQLi::commit()
Zamierzasz opublikować, ale jest to całkiem niezłe. W krótkiej odpowiedzi na pytanie Johna nie ma różnicy. Jak stwierdza Andrew, konwencja w podręczniku PHP opisująca metodę klasy jako ClassName :: methodName Zamiarem jest użycie jako obiektu, tj. $ Name-> commit(), chyba że w dokumentacji jest inaczej. – simonrjones
Ta odpowiedź jest niesamowita. jak zrobić FooBar :: fizz() -> select ("something") -> where ("something"); – TheCrazyProfessor