2012-11-29 27 views
12

get_defined_vars sắp (trích dẫn):Có cách nào để nhận các biến do người dùng khai báo trong PHP không?

trở lại một mảng đa chiều có chứa một danh sách của tất cả các biến được định nghĩa, hãy cho họ môi trường, máy chủ hoặc biến do người dùng định nghĩa

tốt, cho tôi công việc gỡ lỗi, tôi chỉ cần những người dùng xác định. Có chức năng bổ sung php hay không?

EDIT: Ok Tôi không nói rõ tôi là chính xác những gì sau đó, đây là ví dụ nhỏ:

<?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

bạn có nghĩa là người dùng đã xác định và được khai báo trong định nghĩa lớp học không? – Ray

+0

var do người dùng xác định là gì? mà bạn đã xác định trực tiếp trong tập lệnh của riêng mình? làm thế nào có thể PHP nói giữa điều đó và một var được định nghĩa trong một số tập tin bên ngoài bạn yêu cầu/bao gồm? –

+0

không, không phải về vars lớp, tôi cần vars được xác định trong phạm vi toàn cầu –

Trả lời

7

Làm thế nào để thao tác một mảng nhỏ?

$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

Câu trả lời này phù hợp nhất với nhu cầu của tôi. Cảm ơn. –

+0

@Crisp Bạn đang thiếu một số [biến được xác định trước] (http://php.net/manual/en/reserved.variables.php). – eisberg

12

Có bạn có thể:

<?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)); 

Sẽ trả lại:

array(1) { 
    ["b"]=> 
    int(1) 
} 
+0

điều gì sẽ xảy ra với các biến phiên và các biến được gửi như $ _POST và như vậy ?, tôi thích ý tưởng của bạn mặc dù do đó upvote –

+1

@EyalAlsheich Mọi thứ được xác định trước '$ a' (trong ví dụ này) sẽ bị ẩn. $ _POST được định nghĩa trước khi thực hiện bất kỳ mã người dùng nào. Đối với các phiên, nó phụ thuộc nếu bạn sử dụng 'session_start();' hoặc tự động bắt đầu phiên. – eisberg

+0

Điều này thực sự gọn gàng. Câu trả lời hay nhất ở đây. – ankr

0

This có vẻ như một giải pháp tuyệt vời cho vấn đề của bạn:

<?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

Điều này sẽ ẩn tất cả các biến do người dùng xác định bắt đầu bằng dấu gạch dưới và bắt đầu bằng GLOBALS. – eisberg

Các vấn đề liên quan