[英]PHP - Function name from variable
好的,我已經為此找到了一個可能的解決方案,但出於某種原因,我無法在我的應用程序中使其工作。 顯然,如果我有一個包含名稱功能的變量,我可以使用
<?php echo $variable(); ?>
輸出具有相同名稱的功能。
我正在使用Codeigniter。 它在Form幫助器中有一個函數來輸出一個文本字段,即
<?php form_input(); ?>
我有一個變量
<?php $instance['taxon_field'] = 'form_input'; ?>
如果我回顯這個變量,我確實得到了所需的值'form_input'。 但是,一旦我試着呼應
$instance['taxon_field']()
我收到警告:
Message: Illegal string offset 'taxon_field'
和一個致命的錯誤:
Call to undefined function p()
我在這里真的很無能為力,因為只回顯變量給出'form_input',但回顯$ variable()只給'p'。
我哪里做錯了?
這里的實際問題是$instance
不是數組,而是字符串。 從錯誤消息判斷,它是一個以p
開頭的字符串。
語法$var[$key]
不僅用於訪問數組元素,還用於索引字符串,其中$var[0]
將是$var
等的第一個字符(實際上是字節)。如果$instance
是一個字符串並且您編寫$instance['taxon_field']
然后PHP將嘗試將'taxon_field'
轉換為整數以便索引到字符串。 根據通常的轉換規則 ,這會得到0
,因此整個表達式會為您提供字符串的第一個字母。
假設字符串以p
開頭,那么很明顯為什么它會嘗試調用具有該名稱的函數。
call_user_func($instance['taxon_field']);
造成的混亂實際上是我自己的錯,因為我沒有提供一些我認為不重要的信息,但結果卻是非常重要的。 我的$ instance []數組實際上是foreach循環的結果(其中兩個,確切地說)並且是更大的多維數組的一部分。 實際代碼更復雜,但我會嘗試正確代表它:
<?php
$bigger_array = array(
0 => array(
'field_one' => 'value_one',
'field_two' => 'value_two',
'field_three' => 'new_function'
),
1 => array(
'field_one' => 'new_value_one',
'field_two' => 'new_value_two',
'field_three' => 'echo'
)
);
function new_function()
{
echo 'New function called.';
}
foreach($bigger_array as $instance)
{
$name = $instance['field_three'];
$name('Hello World!');
}
?>
這將輸出以下內容:
新功能叫做。 致命錯誤:在第69行的/opt/lampp/htdocs/bla.php中調用未定義的函數echo()
換句話說,新定義的函數工作正常,但內置的'echo'卻沒有。
這實際上不是我原來的問題,這是我在嘗試調試初始問題時遇到的問題。 最初的問題是從一維數組創建函數可以正常工作。 而在foreach循環中從多維數組創建函數會將數組轉換為具有其最后一個成員值的字符串。
現在,我仍然無法完全回答我的問題,但我認為我提供的信息可能會帶來解決方案。 在我給出的簡化示例中,為什么我得到的信息是echo()函數未定義,而新函數工作正常?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.