【问题标题】:Arrays as objects数组作为对象
【发布时间】:2009-03-04 13:15:30
【问题描述】:

我有一种方法可以让我将数组用作对象吗?

我的主类中有以下代码

function  __construct()
{
        require 'config.php';
        $this->config = new PHPSO_Config();
}

PHPSO_Config 类看起来像这样

class PHPSO_Config
{
    /**
     * The administrators email address
     */
    var $adminEmail = 'user@domain.tld'; //I'm using this email to test
}

那么我可以完成同样的事情,并且能够在不创建第二个类的情况下将配置变量作为对象访问吗?

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    您可以使用

    将数组转换为对象
    $myObject = (object) $myarray;
    

    因此以下应该可以工作(未经测试):

    function  __construct()
    {
            require 'config.php';
            $this->config = (object) array("username" => "root");
    }
    

    那么 $class->config->username 应该可以工作。

    【讨论】:

    • 我没用过,但这看起来会提供我正在寻找的功能。
    【解决方案2】:

    您可以使用PHP5 overloading 使您的类看起来具有配置类提供的属性,例如像这样:

    class MyClass
    {
        private $config;
    
        function  __construct()
        {
            require 'config.php';
            $this->config = new PHPSO_Config();
        }
    
    
        public function __get($name) {
            if (property_exists($this->config, $name)) {
                return $this->config->$name;
            }
            return null;
    }
    

    然后做这样的事情:

    $config=new MyClass;
    echo $config->adminEmail;
    

    将导致看到内部配置类的 adminEmail 成员变量。

    这几乎是Strategy Pattern,可以在运行时选择一个类的运行时实现。

    【讨论】:

      【解决方案3】:

      我不确定您到底想要什么,但您可以将数组强制转换为对象。确保您不使用数字索引,因为它们不能正常工作;

      $config = array('adminEmail' => 'user@domain.tld');
      $this->config = (object)$config;
      

      【讨论】:

        【解决方案4】:

        也许我在这里遗漏了一些东西,但是您是否尝试用数组替换配置类,然后将其转换为对象?对我来说听起来有点疯狂。我只会有一个配置类,它的设计方式更好。

        最好不要在应该有类的地方创建数组。

        【讨论】:

          【解决方案5】:

          是的

          我个人会使用一种技术:

          你创建一个文件调用任何你想要的(即 config.php) 然后在其中写下例如:

          当你想使用这些信息时,你只需输入“require_once”config.php“;”在 index.php 中的代码上方,所有定义都将在该页面中。 例如,您可以通过键入 $DB_SERVER 来读取数据库服务器名称。

          如果我是你,我会坚持使用它,因为你可以在项目中的任何地方使用它,并且只需从一个文件中维护它,这让生活更轻松。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-23
            • 1970-01-01
            • 2015-11-09
            • 1970-01-01
            相关资源
            最近更新 更多