2012-10-20 14 views
5

Ostatnio czytałem dokumentacji php i znaleźć ciekawą notatkę w sekcji strun:Dostęp metodę obiektu wewnątrz łańcucha

funkcjami metoda nazywa, statycznych zmiennych klasy i klasy stałych wewnątrz {$} pracy od PHP 5 Jednak dostęp do wartości będzie interpretowany jako nazwa zmiennej w zakresie, w którym łańcuch jest zdefiniowany. Używanie pojedynczych nawiasów klamrowych ({}) nie będzie działać, aby uzyskać dostęp do wartości zwracanych funkcji lub wartości stałych klas lub statycznych zmiennych klasy.

Zobacz www.php.net/manual/en/language.types.string.php

on mówi, że nie można używać składni kręcone uzyskać wartość zwracana przez metodę połączenia obiektu. Czy to jest błąd w instrukcji albo ja źle, bo próbowałem poniższy kod i to działa dobrze:

<?php 
class HelloWorld 
{ 
    public static function hello() 
    { 
     echo 'hello'; 
    } 
} 
$a = new HelloWorld(); 

echo "{$a->hello()} world"; 
+0

Wywołanie metody statycznej jako metody instancji i nic niezwróconego z tej metody –

+0

Aby uzyskać dostęp do metody statycznej, użyj '$ a :: hello()' – doublesharp

Odpowiedz

0

Co rozumiem z tego wyjaśnieniem jest, stres jest

(...) Korzystanie pojedyncze nawiasów klamrowych ...

Więc na przykład tam myślę, że chce powiedzieć:

echo "I'd like an {$beers::$ale}\n"; nie będzie działać, dlatego pojedyncze nawiasy klamrowe.
I dlatego należy używać podwójnych nawiasów klamrowych, z których pierwszy zwróci wyjście statyczne i drugi, który powróci ostatecznego wyjścia jak w przykładzie tam:

echo "I'd like an {${beers::$ale}}\n"; 
       ^^   ^^ 
+0

Rozumiem to, ale nie rozumiem, dlaczego wspomnieli wywołania metod w tym samym wierszu ze stałymi i statycznymi zmiennymi –

3

PHP DOC Says

nie zadziała dostępu do wartości zwracanych funkcji lub metod lub wartości klasa stałych lub zmiennych statycznych klasy

$a->hello() nie jest jak do wywołania metody statyczne w PHP i również nie jest stałe lub statyczne zmienne klasa To co one oznaczają:

class HelloWorld { 
    const A = "A";//    <---- You can not use it for this 
    public static $B = "B";   <---- or this 

    public static function hello() { 
     echo 'hello'; 
    } 
} 


$a = new HelloWorld(); 
$A = "{HelloWorld::A} world";  <-------- Not Work 
$B = "{HelloWorld::$B} world";  <-------- Not Work 
$C = "{HelloWorld::hello()} world"; <-------- Not Work 

Jeśli teraz spróbować

$A = "X"; // If you don't define this it would not work 
$B = "Y" ; //<------------- -^ 

echo "{${HelloWorld::A}} world"; 
echo "{${HelloWorld::$B}} world"; 

Wyjście

X world   <--- returns X world instead of A 
Y world   <--- returns Y world instead of B 
Powiązane problemy