对象

对象初始化

要创建一个新的 对象,请使用 new 语句实例化一个类

<?php
class foo
{
function
do_foo()
{
echo
"Doing foo.";
}
}

$bar = new foo;
$bar->do_foo();
?>

有关完整讨论,请参阅 类和对象 章节。

转换为对象

如果将 对象 转换为 对象,则不会对其进行修改。如果将任何其他类型的 value 转换为 对象,则会创建一个 stdClass 内置类的新的实例。如果 value 为 null,则新实例将为空。一个 数组 转换为具有键命名的属性和对应值的 对象。请注意,在这种情况下,在 PHP 7.2.0 之前,数值键是不可访问的,除非进行迭代。

<?php
$obj
= (object) array('1' => 'foo');
var_dump(isset($obj->{'1'})); // 自 PHP 7.2.0 起输出 'bool(true)';以前输出 'bool(false)'
var_dump(key($obj)); // 自 PHP 7.2.0 起输出 'string(1) "1"';以前输出 'int(1)'
?>

对于任何其他 value,名为 scalar 的成员变量将包含 value。

<?php
$obj
= (object) 'ciao';
echo
$obj->scalar; // 输出 'ciao'
?>
添加注释

用户贡献的注释 8 个注释

682
helpful at stranger dot com
12 年前
迄今为止,最简单且正确的方法是实例化一个空的通用 PHP 对象,然后可以根据需要对其进行修改

<?php $genericObject = new stdClass(); ?>

我很难找到这个,希望它能帮助其他人!
252
Anthony
8 年前
在 PHP 7 中,有几种方法可以创建空对象

<?php
$obj1
= new \stdClass; // 实例化 stdClass 对象
$obj2 = new class{}; // 实例化匿名类
$obj3 = (object)[]; // 将空数组转换为对象

var_dump($obj1); // object(stdClass)#1 (0) {}
var_dump($obj2); // object(class@anonymous)#2 (0) {}
var_dump($obj3); // object(stdClass)#3 (0) {}
?>

$obj1 和 $obj3 属于同一类型,但 $obj1 !== $obj3。此外,所有三者都将通过 json_encode() 转换为一个简单的 JS 对象 {}

<?php
echo json_encode([
new
\stdClass,
new class{},
(object)[],
]);
?>

输出:[{},{},{}]
47
twitter/matt2000
9 年前
从 PHP 5.4 开始,我们可以使用更美观的格式创建具有某些属性和值的 stdClass 对象

<?php
$object
= (object) [
'propertyOne' => 'foo',
'propertyTwo' => 42,
];
?>
43
Ashley Dambra
10 年前
这是一个更新的 'stdObject' 类版本。它在 MVC 设计模式中扩展到控制器时非常有用,用户可以创建自己的类。

希望它对您有所帮助。

<?php
class stdObject {
public function
__construct(array $arguments = array()) {
if (!empty(
$arguments)) {
foreach (
$arguments as $property => $argument) {
$this->{$property} = $argument;
}
}
}

public function
__call($method, $arguments) {
$arguments = array_merge(array("stdObject" => $this), $arguments); // 注意:方法参数 0 将始终引用主类($this)。
if (isset($this->{$method}) && is_callable($this->{$method})) {
return
call_user_func_array($this->{$method}, $arguments);
} else {
throw new
Exception("致命错误:调用未定义的方法 stdObject::{{$method}}()");
}
}
}

// 用法。

$obj = new stdObject();
$obj->name = "Nick";
$obj->surname = "Doe";
$obj->age = 20;
$obj->adresse = null;

$obj->getInfo = function($stdObject) { // $stdObject 指向此对象 (stdObject)。
echo $stdObject->name . " " . $stdObject->surname . " have " . $stdObject->age . " yrs old. And live in " . $stdObject->adresse;
};

$func = "setAge";
$obj->{$func} = function($stdObject, $age) { // $age 是调用此方法时传递的第一个参数。
$stdObject->age = $age;
};

$obj->setAge(24); // 参数值 24 传递给方法 'setAge()' 中的 $age 参数。

// 创建动态方法。这里我动态生成 getter 和 setter
// 注意:方法名称区分大小写。
foreach ($obj as $func_name => $value) {
if (!
$value instanceOf Closure) {

$obj->{"set" . ucfirst($func_name)} = function($stdObject, $value) use ($func_name) { // 注意:您也可以使用关键字 'use' 来绑定父级变量。
$stdObject->{$func_name} = $value;
};

$obj->{"get" . ucfirst($func_name)} = function($stdObject) use ($func_name) { // 注意:您也可以使用关键字 'use' 来绑定父级变量。
return $stdObject->{$func_name};
};

}
}

$obj->setName("John");
$obj->setAdresse("Boston");

$obj->getInfo();
?>
22
developer dot amankr at gmail dot com (Aman Kuma)
8 年前
<!--该示例展示了如何将数组转换为 stdClass 对象,以及如何访问其值以进行显示-->
<?php
$num
= array("Garha","sitamarhi","canada","patna"); // 创建一个数组
$obj = (object)$num; // 将数组更改为 stdClass 对象

echo "<pre>";
print_r($obj); // 通过数组转换创建的 stdClass 对象

$newobj = new stdClass();// 创建一个新的
$newobj->name = "India";
$newobj->work = "Development";
$newobj->address="patna";

$new = (array)$newobj;// 将 stdClass 转换为数组
echo "<pre>";
print_r($new); // 打印新对象

## 如何处理关联数组

$test = [Details=>['name','roll number','college','mobile'],values=>['Naman Kumar','100790310868','Pune college','9988707202']];
$val = json_decode(json_encode($test),false);// 将数组转换为 stdClass 对象

echo "<pre>";
print_r($val);

echo ((
is_array($val) == true ? 1 : 0 ) == 1 ? "array" : "not an array" )."</br>"; // 检查它是否是数组
echo ((is_object($val) == true ? 1 : 0 ) == 1 ? "object" : "not an object" );// 检查它是否是对象
?>
6
qeremy [atta] gmail [dotta] com
12 年前
你还记得一些 JavaScript 实现吗?

// var timestamp = (new Date).getTime();

现在可以使用 PHP 5.4.* 了;

<?php
class Foo
{
public
$a = "I'm a!";
public
$b = "I'm b!";
public
$c;

public function
getB() {
return
$this->b;
}

public function
setC($c) {
$this->c = $c;
return
$this;
}

public function
getC() {
return
$this->c;
}
}

print (new
Foo)->a; // I'm a!
print (new Foo)->getB(); // I'm b!
?>

或者

<?php
// $_GET["c"] = "I'm c!";
print (new Foo)
->
setC($_GET["c"])
->
getC(); // I'm c!
?>
6
mailto dot aurelian at gmail dot com
14 年前
你可以使用类似以下代码创建 [递归] 对象
<?php
$literalObjectDeclared
= (object) array(
'foo' => (object) array(
'bar' => 'baz',
'pax' => 'vax'
),
'moo' => 'ui'
);
print
$literalObjectDeclared->foo->bar; // 输出 "baz"!
?>
5
Mithras
15 年前
回复 harmor:如果数组中包含另一个数组作为值,你可以使用递归方式将所有数组转换为对象。

<?php
function arrayToObject( $array ){
foreach(
$array as $key => $value ){
if(
is_array( $value ) ) $array[ $key ] = arrayToObject( $value );
}
return (object)
$array;
}
?>
To Top