PHP Global Vars - PullRequest
       23

PHP Global Vars

0 голосов
/ 05 октября 2011

Я ломаю голову, почему самая простая вещь не работает.

Все, что мне нужно, - это получить доступ к переменной, объявленной во включенном файле.

У меня есть файл с именем connection.php, в котором у меня есть класс с именем MySqlDatabase.В нижней части файла я создал экземпляр класса и присвоил его переменной с именем $ database

// filename database.php begin

class MySqlDatabase(){

// code goes here

}

$database = new MySqlDatabase();

// filename database.php end

. Теперь я включил database.php в нечто .php и пытался получить доступ к переменной $ database, например так

//something.php
require_once 'database.php';

function foo(){

global $database;

$sql = "some sql statement";
mysql_query($sql,$database->connection);
//and remainig code goes here...

}

Когда я запускаю нечто .php, ожидается, что глобальная переменная $ database должна быть доступна в функции foo (), но похоже, что переменная равна нулю, я тестировал ее с помощью функции is_object ()проверить, что объект доступен, но возвращает false.

В целях отладки я добавил проверку is_object () в файл database.php, и он возвращает true.

Также я попытался получить доступ кглобальная переменная с использованием других опций, таких как

$database =& $GLOBALS['database'];

Но мне все еще не повезло.Затем я распечатал полный массив $ GLOBALS с помощью функции print_r (), но у него нет переменной $ database, я также проверил с помощью get_defined_vars (), но у него также нет этой переменной.Но я могу видеть их в самом включенном файле

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

Ответы [ 5 ]

2 голосов
/ 05 октября 2011

Я внес некоторые изменения в ваш код, эта работа для меня.

database.php

<?php
// filename database.php begin
class MySqlDatabase
{
    public $connection;
    function MySqlDatabase()
    {
        $this->connection= mysql_connect('HOST','USER','PASSWORD');
        mysql_select_db('databaseName',$this->connection);
    }
}
$database = new MySqlDatabase();
// filename database.php end
?>

something.php

<?php
require_once 'database.php';
function foo( )
{
    global $database ;
    $sql = "select * from tableName";
    $rs=mysql_query($sql,$database->connection);
    while($row=mysql_fetch_array($rs))
    {
        print_r($row);
    }
    //and remainig code goes here...
}
foo();
?>

Возможно, вы манипулируете переменной $connection в неправильном поместье.

1 голос
/ 05 октября 2011

Есть только 3 возможных причины

  • $ база данных определена вне глобальной области
  • database.php включается не как файл
  • опечатка невидима для читателя
1 голос
/ 05 октября 2011

Вы можете использовать одноэлементный шаблон или установить переменную static в классе базы данных.

1 голос
/ 05 октября 2011

Если вы включили файл, используйте следующее:

//something.php
require_once 'database.php';

   /* Function FOO starts a new scope and doesn't see database object declared in database.php 
    * Therefore, you pass on the database object from calling function and use that instead.
    */

function foo($dbObj){     

    $sql = "some sql stagement";
    mysql_query($sql,$dbObj->connection);
    //and remainig code goes here...

}

foo($database);
0 голосов
/ 11 октября 2011

Ну, я понял проблему. Проблема связана с платформой amfphp. Эта структура включает в себя все мои файлы (что-то .php). Это сложно объяснить, но простыми словами я включил database.php в один из основных php-файлов, связанных с платформой amfphp.

Спасибо за ваши предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...