$obj->{$_GET["func"]}($_GET["param"])
Sadece ismi $ _GET ["işlev"] saklanır ve bir parametre $ _GET ["param"] olarak geçmesi yöntemini çağırır.
Parantez (aynı zamanda benzer amaçlar için dizeleri parantez kullanmak yöntem adı disambiguate hizmet, örneğin echo "calling {$_GET['func']}";
PHP manual page on variable variables fazla, örneğin bakınız
In order to use variable variables
with arrays, you have to resolve an
ambiguity problem. That is, if you
write $$a[1]
then the parser needs to
know if you meant to use $a[1]
as a
variable, or if you wanted $$a
as the
variable and then the [1]
index from
that variable. The syntax for
resolving this ambiguity is: ${$a[1]}
for the first case and ${$a}[1]
for
the second.
A note on security
Bu kabul cevap olarak, ben size denilen istemem $ obj ilgili yöntemler olabilir, bu yüzden körü körüne kullanıcı girişi kullanmak gerektiğini eklemek için gidiyorum.
Siz, örneğin, izin verilen yöntemler bir dizi, örneğin karşı yöntem adını kontrol edebilir
$method=$_GET["func"];
$ok=in_array($method, array('foo', 'bar', 'frobozz'));
Alternatif olarak, yalnızca belirli bir desen takip yöntem isimleri, örneğin izin verebilir 'ajax' öneki:
$method=$_GET["func"];
$ok=preg_match('/^ajax[A-Za-z]/', $method);
Veya önek geçti yöntem adı eklenir bu fikir, bir varyasyon yalnızca bu önek ile yöntemleri çağrılabilir böylece
$method='ajax'.preg_replace('/[^A-Za-z]/', '', $_GET["func"]);
Orada başka yolları vardır, ama umarım bu temel ilkesini gösterir: assume your worst enemy constructed the $_GET
dizisi em>