2013-06-06 2 views
-2

Я следующие php файлы в том же каталоге:PHP: Неопределенная переменная ошибка

connection.php 
index.php 
lib.php 

Соответствующий код из connection.php:

.... 
.... 
$client = 4; //something that I've defined here 
.... 
.... 

Соответствующий код index.php

require_once('connection.php'); 
require_once('lib.php'); 
.... 
function_search(); //function of lib.php 
.... 
.... 

Соответствующий код lib.php

class function_my_exception extends function_your_exception { 

    function __construct($hint, $debuginfo=null) { 
     parent::__construct($hint, 'debug', '', $hint, $debuginfo); 
    } 

} 
function function_search(){ 
.... 
.... 
if ($client !=4) 
    //Do something 
} 

Когда я бегу index.php, я получаю ошибку Undefined variable $client" in line xxx of lib.php

+0

if ($ client! = 4) -> что находится в $ client, когда этот код работает? var dump it – wazy

+0

'$ client = 4', как я определил в файле' connection.php'. Когда я объединять 3 файла в один, они успешно запускаются. – xan

+0

Вот почему я прошу вас сбрасывать его var, это разные области для этой переменной, не так ли? – wazy

ответ

4

Это потому, что внутри функции function_search()

$client не доступен!

Вы можете либо передать его в качестве аргумента функции

function function_search($client) 
{ 
... 
} 

И при вызове функции вы передаете $ клиента в

function_search($client); 

Или вы можете использовать global ключевое слово, чтобы сделать он доступен в функции

Обновление: этого глобального метода следует избегать, поскольку возможно, что где-то в коде $client изменяется и вызывает странное поведение или даже ошибки внутри вашего скрипта, обычно лучше передать аргумент функции, поскольку у вас больше контроля над переменной.

function function_search() 
{ 
    global $client; 
... 
} 
+0

yep в значительной степени то же самое, что я пытался заставить его посмотреть в комментариях – wazy

+0

:) Я бы пошутил насчет того, что это выходит за рамки вопроса, но я не могу быть обеспокоен lol! – Dale

+0

Просто небольшое примечание ... лучше передать $ client в 'function ($ client)', а не глобально, так как он может быть изменен в некоторых других местах! Чтобы сохранить работу старой функции, сделайте ее «function function_search ($ client = false)» – kevinamadeus

0

Редактировать ваш lib.php к этому:

class function_my_exception extends function_your_exception { 

    function __construct($hint, $debuginfo=null) { 
     parent::__construct($hint, 'debug', '', $hint, $debuginfo); 
    } 
// delete it here 

    function function_search(){ 
    .... 
    .... 
    if ($client !=4) 
     //Do something 
    } 

} // add it here 

Обратите внимание, что вы имели закрывающий } только после того, как функции __construct. это должно быть в конце этих функций.