Как использовать внешнюю переменную в классе PHP? - PullRequest
3 голосов
/ 20 марта 2012

У меня есть config.php с этим ...

$dbhost = "localhost";

Я хочу использовать переменную $ dbhost внутри класса.

User.class.php

include 'config.php';    
class User {
    private $dbhost = ???
    }

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

ОБНОВЛЕНИЕ: Вау, спасибо всем за помощь. Впервые на этом сайте, но я мог бы просто остаться и вернуть, где смогу.

Ответы [ 4 ]

4 голосов
/ 20 марта 2012

Вы можете использовать глобальную переменную , лучше определить константу , но лучше использовать метод установки / получения. Когда вы используете класс, любой внешний ресурс, который он использует, должен быть передан ему. Эта модель называется внедрение зависимостей , если вы хотите исследовать ее дальше.

В этом примере я объединил установщик и получатель в один метод и включил возможность установки значения при первом создании экземпляра с помощью конструктора:

class User
{
    private $host = null;

    public function host($newHost = null)
    {
        if($newHost === null)
        {
            return $this->host;
        }
        else
        {
            $this->host = $newHost;
        }
    }

    function __construct($newHost = null)
    {
        if($newHost !== null)
        {
            $this->host($newHost);
        }
    }
}

//Create an instance of User with no default host.
$user = new User();

//This will echo a blank line because the host was never set and is null.
echo '$user->host: "'.$user->host()."\"<br>\n";

//Set the host to "localhost".
$user->host('localhost');

//This will echo the current value of "localhost".
echo '$user->host: "'.$user->host()."\"<br>\n";

//Create a second instance of User with a default host of "dbserver.com".
$user2 = new User('dbserver.com');

//This will echo the current value of "dbserver.com".
echo '$user2->host: "'.$user2->host()."\"<br>\n";
2 голосов
/ 20 марта 2012

Для чего-то вроде хоста db используйте константу:

// define it first
define('DBHOST', 'localhost');

// then anywhere you can use DBHOST:
class User {
    function __construct() {
        echo DBHOST;
    }
}

http://php.net/manual/en/language.constants.php

1 голос
/ 20 марта 2012

несколько способов, я думаю.Сначала передайте его конструктору класса:

include 'config.php';    
class User {         
    private $dbhost;

    function __construct($dbhost){
      $this->dbhost=$dbhost;
    }
}
$user= new User($dbhost);

Или используйте метод установки:

include 'config.php';    
class User {         
    private $dbhost;

    function setDbhost($dbhost){
      $this->dbhost=$dbhost;
    }
}
$user= new User();
$user->setDbhost($dbhost);

Или используйте CONSTANTS:

define('DBHOST', 'localhost');
class User {         
    private $dbhost;

    function __construct(){
      $this->dbhost=DBHOST;
    }
}

ИЛИ используя global:

include 'config.php';    
class User {         
    private $dbhost;

    public function __construct() {
    global $dbhost;
    $this->dbhost=$dbhost;
}
}
0 голосов
/ 20 марта 2012

Если вы планируете использовать переменные (а не константы), используйте следующий код.

В config.php

$dbhost = "localhost";

In User.class.php

include 'config.php';    
class User {
    global $dbhost;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...