2012-10-20 18 views
5

Son zamanlarda okuyordum php belgelerine nesnenin metodunu Erişme ve dize bölümünde ilginç not bulundu: PHP 5'ten beridize içinde

Fonksiyonlar, yöntem çağırır, statik sınıf değişkenleri ve {$} işin içine sınıf sabitleri Bununla birlikte, erişilen değer, dizenin tanımlandığı kapsamdaki bir değişkenin adı olarak yorumlanacaktır. Tek küme parantezlerinin ({}) kullanılması, işlevlerin dönüş değerlerine veya yöntemlerine erişmek için işe yaramaz veya yöntemlerini veya sınıf sabitleri veya statik sınıf değişkenleri değerlerini kullanmayacaktır.

Ben nesnenin yöntem çağrısı tarafından döndürülen değeri elde etmek kıvırcık sözdizimi kullanamazsınız,

Diyor www.php.net/manual/en/language.types.string.php bakınız. o kılavuzda bir hata mı yoksa aşağıdaki kodu denedim çünkü bunu yanlış ve gayet güzel çalışıyor:

O açıklama itibaren, stres üzerinde anlamak ne
<?php 
class HelloWorld 
{ 
    public static function hello() 
    { 
     echo 'hello'; 
    } 
} 
$a = new HelloWorld(); 

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

Örnek yöntem olarak statik bir yöntem çağırma ve bu yöntemden hiçbir şey döndürülmez –

+0

Statik bir yönteme erişmek için, $ a :: hello() karakterini kullanın – doublesharp

cevap

0

(

: ...) tek küme parantezi ...

Yani örnekte orada bunu söylemek istiyor kullanma

bundan böyle tek küme parantezleri çalışmayacaktır.
Ve orada örnekte olduğu gibi nihai çıktı dönecektir hangi statik çıkışını ve ikinci dönecektir ilki çift küme parantezi kullanarak gerektiğini bu yüzden:

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

Bunu anlıyorum, ama neden aynı yöntemde sabit ve durağan değişkenler ile aynı yöntemi çağırdıklarını anlamıyorum. –

3

PHP DOC Says

sınıf sabitleri veya statik sınıf değişkenleri

fonksiyonları veya yöntemlerin dönüş değerleri veya değerleri erişmek için çalışmaz 10

$a->hello()PHP statik yöntemini çağırın ve ayrıca bu ne anlama geldikleri bir sabitler veya statik sınıf değişkenleri değil nasıl değil:

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 

şimdi denerseniz

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

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

Çıktı

X world   <--- returns X world instead of A 
Y world   <--- returns Y world instead of B