我有一段代码,我需要在我的应用程序的很多地方使用。
的例子:
$count_device = VSE::count_device($cpe_mac);
$c_devices = $count_device['Count_of_devices'];
$c_active = $count_device['Count_of_active'];
$c_inactive = $count_device['Count_of_inactive'];
$c_offline = $count_device['Count_of_offline'];
现在,它们是控制器的10
。如果我需要修复任何东西,我需要修复在10
的地方。
我正在寻找一个更好的方法来控制这个
我想写一个函数
public static function get_device_info($cpe_mac){
$count_device = VSE::count_device($cpe_mac);
$c_devices = $count_device['Count_of_devices'];
$c_active = $count_device['Count_of_active'];
$c_inactive = $count_device['Count_of_inactive'];
$c_offline = $count_device['Count_of_offline'];
}
当我调用这个函数时:$devices = get_device_info($cpe_mac);
我只能访问1个变量,即$devices
。
我将无法访问该函数中的所有5
变量。
- count_device美元c_devices美元c_active美元c_inactive美元c_offline美元
我找到了get_defined_vars,但这并不是我真正想要的。
<标题>
如何去实现这个?
如何移动代码块并将其包含回来?
我应该开始研究PHP的require/include吗?
标题>我一直这样做,特别是在整个站点使用相同的页眉/页脚。只需将这一行放到需要该代码的文档中。
<?php require_once('php/code_block_one.php'); ?>
如果您想在一个页面中多次调用同一块代码,请将require_once
更改为require
。
如果您不想更改页面上的任何变量,并且您可能正在考虑使用全局函数,您可以:
function get_device_info($cpe_mac)
{
$count_device = VSE::count_device($cpe_mac);
return [
'c_devices' => $count_device['Count_of_devices'],
'c_active' => $count_device['Count_of_active'],
'c_inactive' => $count_device['Count_of_inactive'],
'c_offline' => $count_device['Count_of_offline'],
];
}
则调用:
extract(get_device_info($someVar));
,你可以访问:
$c_devices;
$c_active;
$c_inactive;
$c_offline;
一如既往
请注意,我并不是说这是一个比其他提供的更好的答案,我只是说这是一个替代方案。
希望这对你有帮助!
你可以把所有东西都包装在DeviceInfo类中,然后只使用该类的属性。
class DeviceInfo
{
public $c_devices;
public $c_active;
public $c_inactive;
public $c_offline;
public function __construct($cpe_mac) {
$count_device = VSE::count_device($cpe_mac);
$this->c_devices = $count_device['Count_of_devices'];
$this->c_active = $count_device['Count_of_active'];
$this->c_inactive = $count_device['Count_of_inactive'];
$this->c_offline = $count_device['Count_of_offline'];
}
}
把这个类放在它自己的文件DeviceInfo.php中,然后在你需要的地方使用
include_once("DeviceInfo.php");
放在文件的顶部,并创建该类的新实例。(我使用include_once来确保DeviceInfo类没有被重新定义,如果它已经被定义了)
$deviceInfo = new DeviceInfo($cpe_mac);
您可以通过如下方式访问属性来访问这些值。
$deviceInfo->c_devices;
通过这种方式,您可以获得值的代码完成(取决于您的IDE),并且当您实际想要在代码中使用该信息时,不必依赖于记住数组键名。
如果你想更进一步,你甚至可以在这个类中添加getter函数,所以如果将来你需要在不改变API的情况下改变这些值的计算或获取方式,那就简单多了。它看起来像这样:
class DeviceInfo
{
protected $c_devices;
protected $c_active;
protected $c_inactive;
protected $c_offline;
public function get_c_devices() {
return $this->c_devices;
}
public function get_c_active() {
return $this->c_active;
}
public function get_c_inactive() {
return $this->c_inactive;
}
public function get_c_offline() {
return $this->c_offline;
}
public function __construct($cpe_mac) {
$count_device = VSE::count_device($cpe_mac);
$this->c_devices = $count_device['Count_of_devices'];
$this->c_active = $count_device['Count_of_active'];
$this->c_inactive = $count_device['Count_of_inactive'];
$this->c_offline = $count_device['Count_of_offline'];
}
}
这里唯一的区别是,现在要获得值,你需要调用函数,而不是直接访问属性,像这样:
$deviceInfo = new DeviceInfo($cpe_mac);
$deviceInfo->get_c_devices(); // returns devices
对于这么简单的示例,额外的代码可能不值得,但这确实使将来更新这些代码更容易,而不会破坏应用程序其余部分调用这些函数的所有点。
使用引用传递。
public static function
get_device_info($cpe_mac, &$count_device, &$c_devices, &$c_active, &$c_inactive, &$c_offline){
$count_device = VSE::count_device($cpe_mac);
$c_devices = $count_device['Count_of_devices'];
$c_active = $count_device['Count_of_active'];
$c_inactive = $count_device['Count_of_inactive'];
$c_offline = $count_device['Count_of_offline'];
}
// now to call this function...
Clazz::get_device_info("cpe_mac", $count_device, $c_devices, $c_active, $c_inactive, $c_offline);
var_dump($count_device, $c_devices, $c_active, $c_inactive, $c_offline);
// they output useful data!
另外,根据你的用例,如果你的PHP代码没有直接从源代码部署到服务器(例如,如果你发布了打包的phars等),你可能想使用cpp
(C预处理器)来预处理你的文件。
//METHOD 1
public static $c_devices = null;
public static $c_active = null;
public static $c_inactive = null;
public static $c_offline = null;
public static function get_device_info($cpe_mac){
$count_device = VSE::count_device($cpe_mac);
self::$c_devices = $count_device['Count_of_devices'];
self::$c_active = $count_device['Count_of_active'];
self::$c_inactive = $count_device['Count_of_inactive'];
self::$c_offline = $count_device['Count_of_offline'];
}
ClassName::$c_devices;
ClassName::$c_active;
ClassName::$c_inactive;
ClassName::$c_offline;
//METHOD 2
public static $cpe_mac = null;
public static function get_device_info($key){
$count_device = VSE::count_device(self::$cpe_mac);
return $count_device[$key];
}
ClassName::$cpe_mac = $cpe_mac;
ClassName::get_device_info('Count_of_devices');
ClassName::get_device_info('Count_of_active');
ClassName::get_device_info('Count_of_inactive');
ClassName::get_device_info('Count_of_offline');