PHP 8.4.2 Released!

オブジェクト

オブジェクトの初期化

オブジェクトを初期化するためには、new 命令によりオブジェクトのインスタンスを変数に作成します。

<?php
class foo
{
function
do_foo()
{
echo
"foo を実行します。";
}
}

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

詳細な事項については、 クラスおよびオブジェクト のセクションを参照ください。

オブジェクトへの変換

オブジェクトがオブジェクトに変換される場合はなにも修正されません。 オブジェクト以外の型の値がオブジェクトに変換される時には、stdClass というビルトインクラス(予めPHPの内部で定義されているクラス)のインスタンスが新しく生成されます。 その際、値が 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)'
?>

上記以外の値の場合には、scalar という名前のメンバ変数が値を格納します。

<?php
$obj
= (object) 'ciao';
echo
$obj->scalar; // 'ciao' を出力します
?>
add a note

User Contributed Notes 8 notes

up
682
helpful at stranger dot com
12 years ago
By far the easiest and correct way to instantiate an empty generic php object that you can then modify for whatever purpose you choose:

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

I had the most difficult time finding this, hopefully it will help someone else!
up
251
Anthony
8 years ago
In PHP 7 there are a few ways to create an empty object:

<?php
$obj1
= new \stdClass; // Instantiate stdClass object
$obj2 = new class{}; // Instantiate anonymous class
$obj3 = (object)[]; // Cast empty array to object

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

$obj1 and $obj3 are the same type, but $obj1 !== $obj3. Also, all three will json_encode() to a simple JS object {}:

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

Outputs: [{},{},{}]
up
46
twitter/matt2000
9 years ago
As of PHP 5.4, we can create stdClass objects with some properties and values using the more beautiful form:

<?php
$object
= (object) [
'propertyOne' => 'foo',
'propertyTwo' => 42,
];
?>
up
46
Ashley Dambra
10 years ago
Here a new updated version of 'stdObject' class. It's very useful when extends to controller on MVC design pattern, user can create it's own class.

Hope it help you.

<?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); // Note: method argument 0 will always referred to the main class ($this).
if (isset($this->{$method}) && is_callable($this->{$method})) {
return
call_user_func_array($this->{$method}, $arguments);
} else {
throw new
Exception("Fatal error: Call to undefined method stdObject::{$method}()");
}
}
}

// Usage.

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

$obj->getInfo = function($stdObject) { // $stdObject referred to this object (stdObject).
echo $stdObject->name . " " . $stdObject->surname . " have " . $stdObject->age . " yrs old. And live in " . $stdObject->adresse;
};

$func = "setAge";
$obj->{$func} = function($stdObject, $age) { // $age is the first parameter passed when calling this method.
$stdObject->age = $age;
};

$obj->setAge(24); // Parameter value 24 is passing to the $age argument in method 'setAge()'.

// Create dynamic method. Here i'm generating getter and setter dynimically
// Beware: Method name are case sensitive.
foreach ($obj as $func_name => $value) {
if (!
$value instanceOf Closure) {

$obj->{"set" . ucfirst($func_name)} = function($stdObject, $value) use ($func_name) { // Note: you can also use keyword 'use' to bind parent variables.
$stdObject->{$func_name} = $value;
};

$obj->{"get" . ucfirst($func_name)} = function($stdObject) use ($func_name) { // Note: you can also use keyword 'use' to bind parent variables.
return $stdObject->{$func_name};
};

}
}

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

$obj->getInfo();
?>
up
21
developer dot amankr at gmail dot com (Aman Kuma)
8 years ago
<!--Example shows how to convert array to stdClass Object and how to access its value for display -->
<?php
$num
= array("Garha","sitamarhi","canada","patna"); //create an array
$obj = (object)$num; //change array to stdClass object

echo "<pre>";
print_r($obj); //stdClass Object created by casting of array

$newobj = new stdClass();//create a new
$newobj->name = "India";
$newobj->work = "Development";
$newobj->address="patna";

$new = (array)$newobj;//convert stdClass to array
echo "<pre>";
print_r($new); //print new object

##How deals with Associative Array

$test = [Details=>['name','roll number','college','mobile'],values=>['Naman Kumar','100790310868','Pune college','9988707202']];
$val = json_decode(json_encode($test),false);//convert array into stdClass object

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

echo ((
is_array($val) == true ? 1 : 0 ) == 1 ? "array" : "not an array" )."</br>"; // check whether it is array or not
echo ((is_object($val) == true ? 1 : 0 ) == 1 ? "object" : "not an object" );//check whether it is object or not
?>
up
4
qeremy [atta] gmail [dotta] com
12 years ago
Do you remember some JavaScript implementations?

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

Now it's possible with 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!
?>

or

<?php
// $_GET["c"] = "I'm c!";
print (new Foo)
->
setC($_GET["c"])
->
getC(); // I'm c!
?>
up
6
mailto dot aurelian at gmail dot com
15 years ago
You can create [recursive] objects with something like:
<?php
$literalObjectDeclared
= (object) array(
'foo' => (object) array(
'bar' => 'baz',
'pax' => 'vax'
),
'moo' => 'ui'
);
print
$literalObjectDeclared->foo->bar; // outputs "baz"!
?>
up
5
Mithras
16 years ago
In response to harmor: if an array contains another array as a value, you can recursively convert all arrays with:

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