Tamam, ben şimdi bir dosya üzerinden satır satır okuyorum. O başka bir XML belgesinde tanımlanan beri, dosyadaki her fonksiyonları adını biliyorum. Yani bu ne olmalıdır:
function function_name
Işlev_adı işlevin adıdır.
Ben zaten fonksiyon isimlerinin bir diziye koyduk bir XML belgesinden fonksiyon tanımları bütün olsun, ve ben php dosyasından sadece bu işlevleri kapmak gerekir. Sadece o bu işlevleri vardır ki ve o php dosyasını yeniden. Bir php dosyası ben bu işlevleri dışında şerit ve kullanıcı XML dosyasında belirtilen sadece fonksiyonları ile. Php dosyasını yeniden yazmak gerek daha, XML etiketinde tanımlanan olandan daha fazla işlevleri vardır eğer, söylemektir.
Yani, yüz ikilem çizgi ile bir fonksiyon okuma hattının END nasıl belirleneceği ve ben fonksiyonları içlerinde fonksiyonlara sahip olabilir farkında değilim. Yani içlerinde işlevleri kaldırmak istemiyorum. Bağımsız ve sadece fonksiyonlar ekteki XML dosyası içinde tanımlı değildir. Bunun nasıl herhangi bir fikir?
Tamam, ben şimdi şu işlevini kullanarak ediyorum:
//!!! - Used to grab the contents of all functions within a file with the functions array.
function get_functions($source, $functions = array())
{
global $txt;
if (!file_exists($source) || !is_readable($source))
return '';
$tokens = token_get_all(file_get_contents($source));
foreach($functions as $funcName)
{
for($i=0,$z=count($tokens); $i<$z; $i++)
{
if (is_array($tokens[$i]) && $tokens[$i][0] == T_FUNCTION && is_array($tokens[$i+1]) && $tokens[$i+1][0] == T_WHITESPACE && is_array($tokens[$i+2]) && $tokens[$i+2][1] == $funcName)
break;
$accumulator = array();
// collect tokens from function head through opening brace
while($tokens[$i] != '{' && ($i < $z)) {
$accumulator[] = is_array($tokens[$i]) ? $tokens[$i][1] : $tokens[$i];
$i++;
}
if($i == $z) {
// handle error
fatal_error($txt['error_occurred'], false);
} else {
// note, accumulate, and position index past brace
$braceDepth = 1;
$accumulator[] = '{';
$i++;
}
while($braceDepth > 0 && ($i < $z)) {
if(is_array($tokens[$i]))
$accumulator[] = $tokens[$i][1];
else {
$accumulator[] = $tokens[i];
if($tokens[$i] == '{') $braceDepth++;
else if($tokens[i] == '}') $braceDepth--;
}
$i++;
}
$functionSrc = implode(null,$accumulator);
}
}
return $functionSrc;
}
Tamam, bu php dosyaların içeriği alır böylece:
<?php
function module_testing($params)
{
// Is it installed?
$test_param = !isset($params['test_param']) ? 'Testing Testing 1 2 3!' : $params['test_param'];
// Grab the params, if they exist.
if (is_array($params))
{
echo $test_param;
}
// Throw an error.
else
module_error();
}
?>
ve bunu gibi pek değiştirir:
<?php
function module_testing($params)
{
// Is it installed?
$test_param isset$params'test_param' 'Testing Testing 1 2 3!' $params'test_param'
// Grab the params, if they exist.
if is_array$params
echo $test_param
// Throw an error.
else
module_error
?>
Gördüğünüz gibi buradan şeyler bir sürü aldı. Ve dirsek eksik son kapanış ... yapmam gereken tüm fonksiyon function module_testing
Burada olup olmadığını kontrol edin ve tüm işlevini kapmak ve aynı dosyaya yazma. Yeterince basit görünüyor, ama WoW, bu IMO sadece bu küçük bir şey için bazı önemli kodlama olduğunu ...
Or I could also check if a function is defined in here that isn't within the $functions array, if so, than just remove that function. Perhaps it's easier with this approach instead??