2009-11-09 35 views
8
<?php 
    function foo($one, $two){ 
    bar($one); 
    } 

    function bar($one){ 
    echo $one; 
    //How do I access $two from the parent function scope? 
    } 
?> 

Nếu tôi có mã ở trên, làm cách nào tôi có thể truy cập biến $ hai từ trong thanh(), mà không cần chuyển nó thành biến (vì lý do không xác định).Biến truy cập từ phạm vi chức năng khác?

Cảm ơn,

Mike

+2

trả lời ngắn gọn: bạn không. – helloandre

+0

Toàn bộ điểm xác định biến trong một phạm vi cụ thể là giới hạn quyền truy cập để không truy cập được ** bên ngoài phạm vi đó. Vì vậy không, không thể. Nếu bạn muốn làm điều này, sau đó không xác định nó trong phạm vi địa phương - sử dụng một lớp hoặc phạm vi toàn cầu. – Smashery

Trả lời

4

Tạo một lớp - bạn có thể khai báo $ hai như một trường hợp mà sẽ có thể truy cập đến tất cả các phương pháp dụ:

class Blah { 
    private $two; 
    public function foo($one, $two){ 
    this->$two = $two; 
    bar($one); 
    } 

    public function bar($one){ 
    echo $one; 
    // How do I access $two from the parent function scope? 
    this->$two; 
    } 
} 
+0

Trong khi câu trả lời của bạn không trả lời chính xác câu hỏi (tôi vẫn tò mò nếu có thể ngoài việc sử dụng một lớp), thì DID nhắc tôi rằng tôi đã ở trong một lớp học, vì vậy tôi đã biến nó thành một thành viên trong lớp. Cảm ơn rất nhiều vì đã giúp đỡ. –

2

Một cách thô để xuất khẩu nó vào phạm vi toàn cầu, ví dụ:

<?php 
    function foo($one, $two){ 
    global $g_two; 
    $g_two = $two; 
    bar($one); 
    } 

    function bar($one){ 
    global $g_two; 
    echo $g_two; 
    echo $one; 
    //How do I access $two from the parent function scope? 
    } 
?> 
+0

Tôi không nghĩ rằng đây là một lời khuyên tốt, thậm chí tho nó sẽ làm việc. –

0

Tôi sử dụng $ toàn cầu thành acc các biến ess trong toàn bộ kịch bản của tôi.

Như thế này:

public function exist($id) { 
    global $db; 

    $query = "SELECT * FROM web_users_session where user_id='$id'"; 
    return $this->_check = $db->num_req($query); 
} 
+0

Bạn đã xem xét một câu trả lời khác chưa? Bạn lặp lại chúng và cũng không sử dụng mã cho 2 chức năng –

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