用php进行静态属性访问

时间:2014-08-06 21:47:51

标签: 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;
        }
    }

我有一个Files.php类,它有一个save方法。在这个方法中,我需要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谢谢?

2 个答案:

答案 0 :(得分:0)

静态变量本质上是一个全局变量,即与实例不同,它只能有一个。因此,如果您需要访问静态变量,则不需要传递该类的实例。只需像这样直接访问它:

JobConfig::$scriptName

答案 1 :(得分:0)

使用::运算符对于引用基类中的函数和变量或引用尚未存在任何实例的类中的函数非常有用。

在您的情况下,您传递JobConfig的实例