PHP kendi sözdizimi teşrih miyim? Örneğin, $object->attribute gibi bir giriş alır ve kendisi diyor bir fonksiyon yazmak istiyorum:
Tamam, o
$foobaradlı bir özelliği olan bir nesne olduğunu düşünmek gerekir anlamına gelir$foo->barbana veriyor. Ibarerişme deneyin ve potansiyel olsun önce bir hata 'non-nesne özelliğini almaya çalışırken', me$foohatta bir nesne olup olmadığını kontrol edelim.
Nihai hedef echo a value if it is set, and fail silently if not etmektir.
Ben böyle tekrarını önlemek istiyorsanız:
<input value="<? if(is_object($foo) && is_set($foo->bar)){ echo $foo->bar; }?> "/>
... Ve yukarıda, ama bu gibi nesne ve ayrı ayrı geçti niteliği sahip olması gereken bir işlevi yazma önlemek için:
<input value="<? echoAttribute($foo,'bar') ?>" />
Ama ... instead hangi bir şey yazmak için:
- object-> öznitelik sözdizimi korur
- esnektir: Ayrıca dizi tuşları veya düzenli değişkenleri işleyebilir
Bu gibi:
<input value="<? echoIfSet($foo->bar); ?> />
<input value="<? echoIfSet($baz['buzz']); ?> />
<input value="<? echoIfSet($moo); ?> />
Ama bu tüm PHP göre benim işlevi her işleyebilir ki, "Ben $object->attribute veya $array[$key] derken ne tür bir şey ben soruyorum" Bana söylemek mümkün olmasına bağlıdır onun Kendi türü.
Is this possible?
Update
Ben burada bazı iyi cevaplar var ve bazı denemeler yaptım. Özetlemek istedim.
- Benim özgün sorunun cevabı "hayır" gibi görünüyor ama biz başarmak için bir yol benim yapmaya çalıştığım oldu buldun. Techpriester I could bir işleve string '$ foo-> bar' geçmek ve bu ve
eval()bunu ayrıştırmak zorunda olduğuna işaret etti. Ben değil almak istiyorum, ama yaklaşım bir anılmayı hak ediyor. - Peter Bailey bir işleve geçirilen almadan önce bir şey gibi
$foo->bardeğerlendirildi alır dikkat çekti. Ben bu düşünce, ama nedense yoktu gerekirdi. Teşekkürler, Peter! - Will Vousden referans
$foo->$bargeçen işlev daha ziyade önceden değerlendirilir yerine, bunu değerlendirmek için izin verdiğini gösterdi. Onun işlevi$fooBilmiyordum bir nesne, değilseisset($foo->bar)şikayetçi olmayacağını gösteriyor.
Daha da ilginci, onun örnek ima görünüyor PHP waits to evaluate a variable until it absolutely has to.
If you're passing something by value, then of course PHP has to determine the value right then. Bu gibi:
$foo->bar = 'hi';
somefunction($foo->bar); // same as somefunction('hi');
Aslında ihtiyacı olduğunda Ama geçen iseniz by reference, bu değerini belirlemek için sabırsızlanıyorum.
: (Şeyler sırayla aşağıdaki) bu gibi
echo ifSet($foo->bar); // PHP has not yet evaluated $foo->bar...
function ifSet(&$somevar){ // ...because we're passing by reference (&$somevar)
// Now we're inside the function, but it still hasn't evaluated $foo->bar; it
// just made its local variable, $somevar, point to the same thing as $foo->bar
if(isset($somevar)){ // Right HERE is where it's evaluated - when we need it
return $bar;
}
}
Cevap herkese teşekkürler! Bir şey yanlış beyan ettiyseniz, lütfen bana bildirin.