我有一个类如下:
class game {
public $db;
public $check;
public $lang;
public function __construct() {
$this->check = new check();
$this->lang = DEFAULT_LANG;
if (isset($_GET['lang']) && !$this->check->isEmpty($_GET['lang']))
$this->lang = $_GET['lang'];
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我有一个$lang也通过构造函数定义的公共变量.
问题是我想从其他与这个类没有直接关系的类中访问这个变量的结果,因为我不想为每个不同的类重新声明它.
那么例如如何从另一个类调用该变量的结果,让我们调用它class Check?
Dan*_* W. 31
如果你标记public $lang;为静态:
public static $lang;
Run Code Online (Sandbox Code Playgroud)
你可以通过它访问它 game::$lang;
如果不是静态的,你需要创建一个游戏实例并直接访问它:
$game = new game;
$game->lang;
Run Code Online (Sandbox Code Playgroud)
(当前)类内部的静态调用:
self::$lang;
Run Code Online (Sandbox Code Playgroud)
后期静态绑定调用(对继承的静态变量):
static::$lang;
Run Code Online (Sandbox Code Playgroud)
从子类调用父类:
parent::$lang;
Run Code Online (Sandbox Code Playgroud)
实例内部的正常调用(实例是在您使用时new Obj();):
$this->lang;
Run Code Online (Sandbox Code Playgroud)
BTW:
定义的变量define('DEFAULT_LANG', 'en_EN');是GLOBAL范围,意思是,可以随处访问!
<?php
define('TEST', 'xxx');
class game {
public function __construct() {
echo TEST;
}
}
//prints 'xxx'
new game;
Run Code Online (Sandbox Code Playgroud)
你可以把它变成静态变量,这样你就可以随时随地调用它,差异就是它而不是
$this->lang;
Run Code Online (Sandbox Code Playgroud)
在编辑它时(仅在课堂游戏中工作)你可以:
self::$lang;
Run Code Online (Sandbox Code Playgroud)
当您从另一个类调用/编辑它(无处不在)时,您可以:
game::$lang
Run Code Online (Sandbox Code Playgroud)
静态类的想法是它只存在于一个实例中,因此程序中只存在一个$ lang.但是没有必要加载整个类来获得它.