2010-10-26 5 views
0

В течение многих лет я сделал что-то вроде этого:Variable Область применения и функции

config.php

<?php 

    $db = array("user" => "username", "pass" => "password"); 

functions.php

<?php 
    require_once('config.php'); 
    function connectToDatabase() { 
     $dbc = new PDO($dsn, $db['user'], $db['pass']); 
     // Do some stuff ... 
    } 

Я только что прочитал PHP руководство и что SHOULDNT работает, но на долгие годы. Существуют ли какие-либо конфигурации сервера, которые позволяют работать?

Я только что закодировал новый скрипт и получил ошибки. Массив $ db даже не инициализирован.

ответ

0

Это на самом деле никогда не работает, даже в старых версиях PHP и не с register_globals.

Чтобы импортировать глобальную переменную в функцию, вам понадобится инструкция global $varname; или передать переменную функции (что обычно предпочтительнее, как globals are bad). Единственным исключением являются суперглобалы.

Вы 1000% уверен, что это не так, как это:

function connectToDatabase() { 
     require_once('config.php'); 
     $dbc = new PDO($dsn, $db['user'], $db['pass']); 
     // Do some stuff ... 
    } 

?

+0

Я просто просматриваю некоторые мои сценарии, и они содержат мой оригинальный пример. У меня есть выделенный сервер centos, который был настроен мной некоторое время назад. Это то, на чем я размещаю все задания клиентов. Я знаю, что это кажется странным и даже невозможным, но это то, что я делал до сегодняшнего дня, когда он застал меня в течение часа, потому что он не работал. –

+0

@Jamie странно! Тогда то, что предлагает @deceze, - единственное объяснение, о котором я могу думать. –

3

Действительно, есть нет переменные в области действия в начале вашей функции connectToDatabase. Вы также должны были получать предупреждения о необъявленных переменных. Возможно, это сработало из-за конфигурации вашей установки базы данных, которая привела к тому, что она использовала имена пользователей по умолчанию и пароли?

+3

Если это на самом деле объяснение, я официально заявляю, что этот метод называется * программированием по serendipity *, или, как @Pekka должен понимать, * mehr Glück als Verstand *. ;) – deceze

Смежные вопросы