OO PHP从另一个类访问公共变量
我的课程如下:OO PHP从另一个类访问公共变量,php,oop,Php,Oop,我的课程如下: class game { public $db; public $check; public $lang; public function __construct() { $this->check = new check(); $this->lang = DEFAULT_LANG; if (isset($_GET['lang']) && !$this->che
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'];
}
}
如您所见,我有一个公共变量$lang
,它也是通过构造函数定义的
问题是,我想从与这个类没有直接关系的其他类访问这个变量的结果,因为我不想为每个不同的类重新声明它
例如,我如何从另一个类调用该变量的结果,让我们调用它
class Check
?因为属性是公共的,所以您可以从类外部以$objInstance->property
的形式访问它。不管您是从另一个对象中的函数、过程脚本调用它。只要您拥有该实例,就可以调用它的公共属性。例:
function foo($c) {
echo $c->lang;
}
foo($check);
此外,还有一些关于使用对象的建议,例如:如果您不在其他对象中创建对象的实例,而是以某种方式(通过setter方法或构造函数)传递它们,则认为这是更好的代码。这使类保持松散耦合,并产生可重用性更强、更易于测试的代码。因此:
class Game
{
...
public function __construct($check, $defaultLang, $get) {
$this->check = $check;
$this->lang = $defaultLang;
if (isset($get['lang']) && !$this->check->isEmpty($get['lang']))
$this->lang = $get['lang'];
}
...
$game = new Game(new Check(), DEFAULT_LANG, $_GET);
echo $game->check;
本文的前半部分是对所谓依赖注入的一个易于理解的解释
如何从另一个类调用该变量的结果,让我们称之为类检查
变量没有结果。如果您想在类游戏
的特定对象$obj
上检索该变量的状态,则只需执行以下操作:
$obj->lang
另一方面,如果$lang
是公共只读的,您应该通过定义它private
或protected
来保护它,并创建一个getter方法
如果您想在另一个类中使用相同的变量名,我建议您考虑继承:
但是这两个对象的变量将不同。如果您标记
public$lang代码>作为静态:
public static $lang;
您可以通过游戏::$lang代码>
如果不是静态的,您需要创建一个游戏实例并直接访问它:
$game = new game;
$game->lang;
(当前)类内部的静态调用:
调用(对继承的静态变量):
从子类调用父类:
parent::$lang;
实例内部的正常调用(实例是在使用new Obj();
时):
顺便说一句:
define('DEFAULT_LANG','en_en')定义的变量代码>是全局范围,意味着,可以访问任何地方
<?php
define('TEST', 'xxx');
class game {
public function __construct() {
echo TEST;
}
}
//prints 'xxx'
new game;
您可以将其设置为静态变量,这样您就可以随时随地调用它,区别在于
$this->lang;
编辑时(仅适用于课堂游戏),请执行以下操作:
当您从另一个类调用/编辑它(在任何地方都有效)时,您会执行以下操作:
game::$lang
静态类的思想是它只存在于一个实例中,因此在您的程序中只存在一个$lang。但是没有必要加载整个类来获得acses。正如我所说的,我想在另一个类中调用它,而不是在程序代码或简单函数中调用它,这正是我想要的!
$this->lang;
<?php
define('TEST', 'xxx');
class game {
public function __construct() {
echo TEST;
}
}
//prints 'xxx'
new game;
$this->lang;
self::$lang;
game::$lang