我有一些代码:
测试控制器:
Class test extends CI_Controller{
public function print_object(){
$x = (object) array('a'=>'A', 'b'=>'B', 'C');
echo '<pre>'.print_r($x, true).'</pre>';
}
}
Test2控制器:
Class test2 extends CI_Controller{
public function get_printed_object(){
$url = "http://localhost/project/test/print_object";
(object) $str = file_get_contents($url);
echo $str->a; //won't make it. resulting error
}
}
行
echo $str->a;
发出警告:试图获取非对象的属性
我是否可以重新制作打印到字符串的$ x对象?
答案 0 :(得分:1)
你遇到的主要问题是file_get_contents
返回一个带有url输出的字符串。因此$str
只是一个字符串,甚至演员也不会改变它。
如果要将其转换为对象,则可以json_encode(或序列化)并在测试中输出该对象。然后test2必须json_decode($str)
来重新创建对象。
答案 1 :(得分:0)
您应该使用原生serialize()
和unserialize()
功能。
通过序列化一个对象,你将获得一个类似json(它不是json,但看起来像)字符串,包含所有信息。反序列化时,可以获得序列化对象的克隆,并可以正常方式访问其方法和属性。
查看这个函数的php手册:
http://php.net/manual/en/function.unserialize.php
http://php.net/manual/en/function.serialize.php
和最后一页的一个很酷的例子: