我创建了以下课程 PHP ver 5.5
#!/bin/bash
# A simple Azure storage example
export AZURE_STORAGE_ACCOUNT=<storage_account_name>
export AZURE_STORAGE_ACCESS_KEY=<storage_account_key>
export container_name=<container_name>
export blob_name=<blob_name>
export image_to_upload=\Downloads\\uploadtest.txt
echo "Creating the container..."
azure storage container create $container_name
echo "Uploading the image..."
azure storage blob upload $image_to_upload $container_name $blob_name
echo "Listing the blobs..."
azure storage blob list $container_name
echo "Done"
然后是扩展类
abstract class Model
{
var $id;
private $cName;
private $tName;
public function __construct($id = 0)
{
$this->cName = 'Im cName';
$this->tName = 'Im tName';
}
}
如果我执行此操作:
class claseExtend extends Model
{
var $id;
public function hola()
{
$this->id = 1;
return (array) $this;
}
}
我期待得到:array(id =&gt; 1)
但是输出是:array(\ u0000Model \ u0000cName:=&gt;'Im cName', \ u0000Model \ u0000tName =&gt; '我tName')
我做错了什么,或者如果属性是私有的,为什么会发生这种情况?
¿为什么数组强制转换包含私有属性?
感谢您的帮助。
答案 0 :(得分:4)
print_r
是一个特殊的魔术函数,它将显示包含私有属性和受保护属性的类。这是一个调试实用程序功能。引自manual:
print_r()
,var_dump()
和var_export()
也会 使用PHP 5显示对象的受保护和私有属性。静态 班级成员不会出现。
在PHP中,私有属性 在派生类中继承,但它们不可访问。
答案 1 :(得分:4)
将对象强制转换为数组时,结果中包含private和protected属性。 documentation说:
如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名,有一些值得注意的例外:整数属性是不可访问的;私有变量的类名前置于变量名;受保护的变量有一个&#39; *&#39;前置于变量名称。这些前置值在任一侧都有空字节。
这些空字节在结果中显示为\u0000
。