2012-11-29 31 views
12

get_defined_vars (alıntı) üzere:PHP'de kullanıcı tarafından bildirilen değişkenleri almanın bir yolu var mı?

dönüş tanımlanmış tüm değişkenlerin listesini ihtiva eden çok-boyutlu bir dizisi için, onları çevre, sunucu ya da kullanıcı tanımlı değişkenler

de olabilir benim hata ayıklama görevi, sadece kullanıcı tanımlı kullanıcılara ihtiyacım var. Php yerleşik veya ek işlevi var mı?

DÜZENLEME:

<?php 
/* 
this script is included, and I don't have info 
about how many scripts are 'above' and 'bellow' this*/ 


//I'm at line 133 
$user_defined_vars = get_user_defined_vars(); 
//$user_defined_vars should now be array of names of user-defined variables 
//what is the definition of get_user_defined_vars()? 

?> 
+0

Sınıf tanımında kullanıcı tanımlı vs declared mı demek istediniz? – Ray

+0

Kullanıcı tanımlı var nedir? kendi betiklerinde doğrudan tanımladığınız bir? PHP, bununla birlikte/dahil ettiğiniz bazı harici dosyalarda tanımlanan bir varmı nasıl söyler? –

+0

hayır, yaklaşık sınıf vars, ben vars –

cevap

7

Nasıl biraz dizi manipülasyon hakkında?

$testVar = 'foo'; 
// list of keys to ignore (including the name of this variable) 
$ignore = array('GLOBALS', '_FILES', '_COOKIE', '_POST', '_GET', '_SERVER', '_ENV', 'ignore'); 
// diff the ignore list as keys after merging any missing ones with the defined list 
$vars = array_diff_key(get_defined_vars() + array_flip($ignore), array_flip($ignore)); 
// should be left with the user defined var(s) (in this case $testVar) 
var_dump($vars); 

// Result: 
array(1) { 
    ["testVar"]=>string(3) "foo" 
} 
+0

Bu cevap benim ihtiyaçlarına en uygun. Teşekkürler. –

+0

Bazı [önceden tanımlanmış değişkenleri] eksik @Crisp (http://php.net/manual/en/reserved.variables.php). – eisberg

12

Evet yapabilirsiniz::

<?php 
// Start 
$a = count(get_defined_vars()); 

/* Your script goes here */ 
$b = 1; 

// End 
$c = get_defined_vars(); 
var_dump(array_slice($c, $a + 1)); 

döndürür:

array(1) { 
    ["b"]=> 
    int(1) 
} 
ben sonra tam olarak ne açıkça vermedi Tamam , burada küçük bir örnektir
+0

o kadar $ _POST gibi içinde gönderilir ve oturum değişkenleri ve değişkenler ne olacağını ?, ben senin fikir gibi. Herhangi bir kullanıcı kodunun yürütülmesinden önce $ _POST tanımlanır. Oturumlar için 'session_start();' veya oturumun otomatik başlatılmasını kullanır. –

+1

gizlenir olsa – eisberg

+0

Bu gerçekten temiz. En iyi cevap burada. – ankr

0

This sorununuza serin bir çözüm gibi görünüyor:

<?php 
// Var: String 
$var_string = 'A string'; 

// Var: Integer 
$var_int = 55; 

// Var: Boolean 
$var_boolean = (int)false; 



/** 
* GetUserDefinedVariables() 
* Return all the user defined variables 
* @param array $variables (Defined variables) 
* @return array $user_variables 
*/ 
function GetUserDefinedVariables($variables){; 
    if (!is_array($variables)) 
     return false; 

    $user_variables = array(); 

    foreach ($variables as $key => $value) 
     if ([email protected]_match('@(^_|^GLOBALS)@', $key)) 
      $user_variables[$key] = $value; 

     return $user_variables; 
} 


echo '<pre>'.print_r(
         GetUserDefinedVariables(
             get_defined_vars() 
               ), true).'</pre>'; 
?> 
+1

Bu, tüm kullanıcı tanımlı değişkenleri alt çizgi ile başlayan ve GLOBALS ile başlayan gizler. – eisberg

İlgili konular