[英]Static property access with php
我一直在使用命名空間,並且有一個單身人士我可以通過。 它保存任務特定的配置數據。
單身人士:
namespace Liberry\Core;
use Liberry\Utilities\Database;
finaL class JobConfig
{
public static $scriptName;
private static $instance;
private static $database;
private $incremental = false;
private $incName;
private $config;
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance($jobName = null, Database $database = null)
{
self::$database = $database ?: new Database();
if (!is_object(self::$instance)) {
if (!isset(self::$scriptName) && is_null($jobName)) {
throw new \Exception("Job name cannot be null");
}
self::$instance = new JobConfig();
self::$scriptName = $jobName;
}
return self::$instance;
}
}
我有一個具有save方法的Files.php
類。 在這種方法中,我需要JobConfig.php
靜態屬性$scriptName
。 這是嘗試使用此屬性的類。
namespace Liberry\Utilities;
use Liberry\Core\JobConfig;
class File
{
private $database;
private $config;
public function __construct(JobConfig $conf, Database $database = null)
{
$this->database = $database ?: new Database();
$this->config = $conf;
}
public function saveFile($data)
{
// $script = $this->config::$scriptName -- THIS DOES NOT WORK
// echo $script . "\n";
$map = array(
'content' => $data,
'name' => $this->config->getFileName(),
'sentByScript' => JobConfig::$scriptName,
'enteredDT' => date('Y-m-d H:i:s')
);
$this->database->insert('files', $map)->runQuery();
}
}
我的問題是,如果我要通過construct()
方法傳遞實例,為什么不能像$this->config::$scriptName
那樣訪問它? 我正在使用php 5.5.9 ubuntu 14.04謝謝?
靜態變量本質上是全局變量,即與實例不同,只能有一個。 因此,如果您需要訪問靜態變量,則無需傳遞類的實例。 只需像這樣直接訪問它:
JobConfig::$scriptName
用於::運算符對於引用基類中的函數和變量或引用尚無任何實例的類中的函數很有用。
在您的情況下,您傳遞JobConfig實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.