非常简单的问题,是否有可能创建一个从类外部检索的变量,'global'到整个类,这样我就不必在每个方法的开头调用'global $ variable' ?
这就是我目前正在做的事情:
class test{
public function testing(){
global $globalVariable,
// Do something
}
public function testing_two(){
global $globalVariable,
// Do something
}
}
换句话说,我可以将变量导入构造函数中,从而使整个类可以访问它们而不必为每个方法调用“global”吗?
更新
我不确定自己是否已经明确表达了自己希望实现的目标。请参阅以下内容:
$globalVariable = 'hello';
class test{
public function testing(){
global $globalVariable,
// Do something
}
public function testing_two(){
global $globalVariable,
// Do something
}
}
答案 0 :(得分:10)
要清除如何操作:
你很可能想做这样的事情
include('database.php');
。在那一点上,你所包含的一切都是你脚本的全局。现在,如果您有类似上面的类,则添加构造函数:
class testclass
{
private $db;
public function __construct($db)
{
$this->db = $db;
}
public function yourmethod()
{
$this->db->prepare(); // And so on
}
}
假设您的全局变量在全局范围内称为$ db。您现在可以使用new testclass($db);
构建对象。现在,在所有方法中使用$this->db
时,无需使用全局语句。
答案 1 :(得分:2)
将该变量作为类的属性传递
class test
{
private $globalVariable = '';
public function testing()
{
$this->globalVariable = 'set-som-value';
}
public function testing_two()
{
$this->globalVariable = 'Do Extra Work';
}
}
您可以使用私有,公开和受保护等字词更改变量可见性,其中private使变量只能访问该类,protected使变量在扩展该特定类的类中可用,而public使变量可以从任何地方访问。
全球课外
global $globalVar;
$globalVar = 'SomeVal';
class test
{
public function testing()
{
global $globalVar;
}
}
答案 2 :(得分:2)
只需使用参考:
class test{
private $myvar;
//use __ or old syntax to your liking
function test() {
global $globalVariable;
$myvar =& $globalVariable;
}
public function testing(){
//Use $this->myvar
// Do something
}
public function testing_two(){
//USe $this->myvar
// Do something
}
}
答案 3 :(得分:0)
这可能会有所帮助。我在课堂外有一个var用于mysqli。
<?php
$DB_NAME = 'database';
$DB_HOST = 'host';
$DB_USER = 'user';
$DB_PASS = 'password';
$linkID = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$Test = new Test($linkID);
class Test {
public $linkID;
function __construct($linkID){ $this->linkID = $linkID; }
public function new_mysql($sql) {
$result = $this->linkID->query($sql) or die($this->linkID->error.__LINE__);
return $result;
}
public function do_query() {
$sql = "SELECT `name` FROM `contacts`";
$result = $this->new_mysql($sql);
while ($row = $result->fetch_assoc()) {
print "Test $row[name]<br>";
}
}
}
?>
现在,数据库详细信息将作为帮助程序传递给类。希望这会有所帮助。