2010-05-12 24 views
5

PHP ürününe yeni girdim ve w3schools'un PHP işlevlerini öğrendim.Bu PHP programı neden çalışmıyor?

<?php 
$v = "echo"; 
$v('foo'); 
?> 

Ama eğer: Bu Bu program

<?php 
$v = "var_dump"; 
$v('foo'); 
?> 

çalıştı Ama bu program işe yaramadı

"fonksiyonu adı bir değişken olduğunda PHP bir işlev çağrısı yapılabilmesini sağlar" dedi Ben echo('foo'); yapıyorum.

Neyi yanlış yapıyorum?

+1

Ben senin sonrası berbat var düşünüyorum. "Bu program işe yaradı" –

+1

sonra ne çalıştı ve işe yaramadı? – Shiki

cevap

15

PHP bu özelliği Değişken fonksiyonlar denir. Burada

konu gerçekten bir işlev ancak dil oluşumu değişkenli fonksiyonlar sadece işlevleriyle kullanılabilir edemezolduğunu echo beraberdir. İlk örneğinizde var_dump bir işlevdi ve iyi çalıştı. PHP doc itibaren

Variable functions için: değil dili ile eser echo(), print() unset(), isset(), boş olarak yapıları olacak

Değişken fonksiyonlar () ,(), require() ve benzerlerini içerir. Bu yapılardan herhangi birini değişken işlevler olarak kullanmak için sarıcı işlevlerini kullanın.

Sen olarak echo yerine printf fonksiyonunun yararlanabilirler:

$e = "printf"; // printf is a function not a language construct. 
$e('foo'); 

veya echo gibi bir sarıcı işlevi yazabiliriz:

$e = "echo_wrapper"; 
$e('foo'); 

function echo_wrapper($input) { // wrapper function that uses echo. 
     echo $input; 
} 
+0

@Shiki: 'print()' da çalışmaz.Printf() 'yi kullanabilirsiniz. – codaddict

+0

haklısın. oops – Shiki

+0

Ayrıca, bunu gerçekten yapmanız gerekiyorsa (hangi durumda olacağınızı düşünmüyorsanız) echo işlevini işlev echoIt ($ string) { echo $ string; } $ v = 'echoIt'; $ v ('foo'); – David

1

echo bir değil işlevi! Bir işlev olan printf'u kullanabilir ve bir şeyi basmak için kullanılabilir.

+0

Hayır bağırmaya gerek yok! Buna katılıyorum olmasına rağmen, gerçek olmayan ve zayıf bir dil tasarımı. – erisco

0

iki olası sorun var ve bunları hem ele almalıdır: Sadece hatırladığım kadarıyla, PHP 5.3 çalışır özelliği

  1. . Bu en yeni ana sürüm, bu yüzden onu kullandığınızdan emin olmalısınız. Senin olmadığın çok muhtemel.
  2. echo bir işlev değil, bir PHP dili yapısıdır. echoes'a iletilen bir sarmalayıcı işlevi yazmanız gerekecek.
+0

Değişken işlevler PHP 5.3'ten çok önce tanıtıldı. Yine de tam sürüm numarasını bilmiyorum. – erisco

0

Bu çalışır:

$v = "printf"; 
$v('foo');