【问题标题】:Referring to an array inside a PHP Object while defining the object在定义对象时引用 PHP 对象内的数组
【发布时间】:2022-01-14 15:48:18
【问题描述】:

我有这个对象定义

return (object) [
    // the database information
    'db_info' => [
        'type' => 'mysql',
        'server' => 'localhost',
        'database' => 'myshop',
        'username' => 'root',
        'password' => 'password',
        'tableprefix' => 'password',
        'charset' => 'password'
    ],
    // the database tables
    'tables_info' => [
        'tblcountries' => db_info.database . '.'. db_info.tableprefix . 'countries',
        'tblsettings' => db_info.database . '.'. db_info.tableprefix . 'settings'
    ]
]

我正在尝试使用在同一个对象中定义的一些数组

在 tables_info 数组中

'tblcountries' => db_info.database . '.'. db_info.tableprefix . 'countries`

有可能吗,如果可以的话怎么办..

【问题讨论】:

  • 不,直到您到达该对象的末尾,该对象才存在,因此没有什么可引用的,即使您使用 -> 正确引用了它
  • 访问该对象数组的可能方法是在上面定义一个变量,如 $db_info 的值,然后将其转换为对象,因此您可以在 tables_info 上使用它,如 $db_info->database 等..
  • 请注意,(object) 演员表不是递归的。 db_info 属性是关联数组,而不是对象。

标签: php arrays object


【解决方案1】:

你可以像这样分两步做到这一点

$obj =  (object) [
        'db_info' => [
            'type' => 'mysql',
            'server' => 'localhost',
            'database' => 'myshop',
            'username' => 'root',
            'password' => 'password',
            'tableprefix' => 'password',
            'charset' => 'password'
        ]
    ];


$obj->table_info = [
    'tblcountries' => $obj->db_info['database'] . '.' . $obj->db_info['tableprefix'] . 'countries',
    'tblsettings' => $obj->db_info['database'] . '.'. $obj->db_info['tableprefix'] . 'settings'
];

print_r($obj);

结果

stdClass Object
(
    [db_info] => Array
        (
            [type] => mysql
            [server] => localhost
            [database] => myshop
            [username] => root
            [password] => password
            [tableprefix] => password
            [charset] => password
        )
    [table_info] => Array
        (
            [tblcountries] => myshop.passwordcountries
            [tblsettings] => myshop.passwordsettings
        )
)

或者,如果您希望一切都是对象,而不是包含数组的对象

$obj =  (object) [
        'db_info' => (object) [
            'type' => 'mysql',
            'server' => 'localhost',
            'database' => 'myshop',
            'username' => 'root',
            'password' => 'password',
            'tableprefix' => 'password',
            'charset' => 'password'
            ]
        ];

$obj->table_info = (object) [
    'tblcountries' => $obj->db_info->database . '.' . $obj->db_info->tableprefix . 'countries',
    'tblsettings' => $obj->db_info->database . '.'. $obj->db_info->tableprefix . 'settings'
];

print_r($obj);

结果

stdClass Object
(
    [db_info] => stdClass Object
        (
            [type] => mysql
            [server] => localhost
            [database] => myshop
            [username] => root
            [password] => password
            [tableprefix] => password
            [charset] => password
        )
    [table_info] => stdClass Object
        (
            [tblcountries] => myshop.passwordcountries
            [tblsettings] => myshop.passwordsettings
        )
)

【讨论】:

  • 是的,它工作得很好。使用第一种方法配置文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多