协慌网

登录 贡献 社区

什么是 PHP 中的 stdClass?

请定义stdClass是什么。

答案

stdClass只是在将其他类型转换为对象时使用的通用 “空” 类。尽管其他两个答案都说, stdClass 不是 PHP 中对象的基类。这可以很容易地证明:

class Foo{}
$foo = new Foo();
echo ($foo instanceof stdClass)?'Y':'N';
// outputs 'N'

我不相信 PHP 中存在基础对象的概念

stdClass是 PHP 的通用空类,有点像 Java 中的Object或 Python 中的object编辑:但实际上并没有用作通用基类; 感谢@Ciaran 指出这一点 )。

它对匿名对象,动态属性等很有用。

考虑 StdClass 的简单方法是作为关联数组的替代方法。请参阅下面的示例,其中显示了json_decode()如何获取 StdClass 实例或关联数组。同样但在此示例中未显示, SoapClient::__soapCall返回一个 StdClass 实例。

<?php
//Example with StdClass
$json = '{ "foo": "bar", "number": 42 }';
$stdInstance = json_decode($json);
echo $stdInstance->foo . PHP_EOL; //"bar"
echo $stdInstance->number . PHP_EOL; //42
//Example with associative array
$array = json_decode($json, true);
echo $array['foo'] . PHP_EOL; //"bar"
echo $array['number'] . PHP_EOL; //42

有关更多示例,请参阅PHP 和 StdClass 中的动态属性

stdClass 是另一个很棒的 PHP 功能。您可以创建一个匿名 PHP 类。让我们看一个例子。

$page=new stdClass();
$page->name='Home';
$page->status=1;

现在认为你有另一个类将使用页面对象进行初始化并在其上执行。

<?php
class PageShow {

    public $currentpage;

    public function __construct($pageobj)
    {
        $this->currentpage = $pageobj;
    }

    public function show()
    {
        echo $this->currentpage->name;
        $state = ($this->currentpage->status == 1) ? 'Active' : 'Inactive';
        echo 'This is ' . $state . ' page';
    }
}

现在,您必须使用 Page Object 创建一个新的 PageShow 对象。

这里不需要为此编写新的类模板,您只需使用 stdClass 即可创建一个类。

$pageview=new PageShow($page);
    $pageview->show();