定義済のクラス

ここでは、標準で定義されているクラスをとりあげます。 さまざまな拡張モジュールで定義されるその他のクラスについては、 個々の拡張モジュールのリファレンスで述べられています。

標準で定義されているクラス

以下のクラスは、PHP ビルドに含まれる標準関数セットで定義されています。

Directory
dir() 関数が作成します。
stdClass
オブジェクトへの型変換 や、いろいろな標準の関数によって作られる、汎用的な空のクラスです。
__PHP_Incomplete_Class
unserialize() 関数が作成する可能性があります。
Exception
ErrorException
php_user_filter
Closure
定義済みの final クラス Closure は、 無名クラス を表現するために使います。
Generator
定義済みの final クラス Generator は、 ジェネレータ を表現するために使います。
ArithmeticError
AssertionError
DivisionByZeroError
Error
Throwable
ParseError
TypeError

特別なクラス

次の識別子は特別な意味を持っているので、クラス名としては使えません。

self
現在のクラス
static
実行時における現在のクラス
parent
親クラス
add a note

User Contributed Notes 6 notes

up
22
spark at limao dot com dot br
13 years ago
if you want a Dynamic class you can extend from, add atributes AND methods on the fly you can use this:
<?php
class Dynamic extends stdClass{
public function
__call($key,$params){
if(!isset(
$this->{$key})) throw new Exception("Call to undefined method ".get_class($this)."::".$key."()");
$subject = $this->{$key};
call_user_func_array($subject,$params);
}
}
?>

this will accept both arrays, strings and Closures:
<?php
$dynamic
->myMethod = "thatFunction";
$dynamic->hisMethod = array($instance,"aMethod");
$dynamic->newMethod = array(SomeClass,"staticMethod");
$dynamic->anotherMethod = function(){
echo
"Hey there";
};
?>

then call them away =D
up
18
wyattstorch42 at outlook dot com
11 years ago
If you call var_export() on an instance of stdClass, it attempts to export it using ::__set_state(), which, for some reason, is not implemented in stdClass.

However, casting an associative array to an object usually produces the same effect (at least, it does in my case). So I wrote an improved_var_export() function to convert instances of stdClass to (object) array () calls. If you choose to export objects of any other class, I'd advise you to implement ::__set_state().

<?php
/**
* An implementation of var_export() that is compatible with instances
* of stdClass.
* @param mixed $variable The variable you want to export
* @param bool $return If used and set to true, improved_var_export()
* will return the variable representation instead of outputting it.
* @return mixed|null Returns the variable representation when the
* return parameter is used and evaluates to TRUE. Otherwise, this
* function will return NULL.
*/
function improved_var_export ($variable, $return = false) {
if (
$variable instanceof stdClass) {
$result = '(object) '.improved_var_export(get_object_vars($variable), true);
} else if (
is_array($variable)) {
$array = array ();
foreach (
$variable as $key => $value) {
$array[] = var_export($key, true).' => '.improved_var_export($value, true);
}
$result = 'array ('.implode(', ', $array).')';
} else {
$result = var_export($variable, true);
}

if (!
$return) {
print
$result;
return
null;
} else {
return
$result;
}
}

// Example usage:
$obj = new stdClass;
$obj->test = 'abc';
$obj->other = 6.2;
$obj->arr = array (1, 2, 3);

improved_var_export((object) array (
'prop1' => true,
'prop2' => $obj,
'assocArray' => array (
'apple' => 'good',
'orange' => 'great'
)
));

/* Output:
(object) array ('prop1' => true, 'prop2' => (object) array ('test' => 'abc', 'other' => 6.2, 'arr' => array (0 => 1, 1 => 2, 2 => 3)), 'assocArray' => array ('apple' => 'good', 'orange' => 'great'))
*/
?>

Note: This function spits out a single line of code, which is useful to save in a cache file to include/eval. It isn't formatted for readability. If you want to print a readable version for debugging purposes, then I would suggest print_r() or var_dump().
up
10
xzero at elite7hackers dot net
7 years ago
There comes improved version of amazing snippet posted by (spark at limao dot com dot br) which allows dynamic methods generations and works as versatile extension of StdClass:

This one is faster, optimised for closures, and will work only with closures. Compatible: >= PHP 5.6
<?php

class Dynamic extends \stdClass
{
public function
__call($key, $params)
{
if ( ! isset(
$this->{$key})) {
throw new
Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
}

return
$this->{$key}->__invoke(... $params);
}
}

?>

Usage examples:

<?php
$dynamic
= new Dynamic();
$dynamic->anotherMethod = function () {
echo
"Hey there";
};
$dynamic->randomInt = function ($min, $max) {
return
mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
$dynamic->randomInt(1, 11),
$dynamic->anotherMethod()
);
?>

This will accept arrays, strings and Closures but is a bit slower due to call_user_func_array
<?php

class Dynamic extends \stdClass
{
public function
__call($key, $params)
{
if ( ! isset(
$this->{$key})) {
throw new
Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
}

return
call_user_func_array($this->{$key}, $params);
}
}

?>

Usage examples:
<?php
$dynamic
= new Dynamic();
$dynamic->myMethod = "thatFunction";
$dynamic->hisMethod = array($dynamic, "randomInt");
$dynamic->newMethod = array(SomeClass, "staticMethod");
$dynamic->anotherMethod = function () {
echo
"Hey there";
};
$dynamic->randomInt = function ($min, $max) {
return
mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
$dynamic->randomInt(1, 11),
$dynamic->anotherMethod(),
$dynamic->hisMethod()
);

?>
up
6
unknown
22 years ago
It's handy to have a array of the reserved classes.....
var_dump (get_declared_classes ());
up
2
xzero at elite7hackers dot net
7 years ago
There comes improved version of amazing snippet posted by which allows dynamic methods generations and works as versatile extension of StdClass:

This one is faster, optimised for closures, and will work only with closures. Compatible: >= PHP 5.6
<?php

class Dynamic extends \stdClass
{
public function
__call($key, $params)
{
if ( ! isset(
$this->{$key})) {
throw new
Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
}

return
$this->{$key}->__invoke(... $params);
}
}

?>

Usage examples:

<?php
$dynamic
= new Dynamic();
$dynamic->anotherMethod = function () {
echo
"Hey there";
};
$dynamic->randomInt = function ($min, $max) {
return
mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
$dynamic->randomInt(1, 11),
$dynamic->anotherMethod()
);
?>

This will accept arrays, strings and Closures but is a bit slower due to call_user_func_array
<?php

class Dynamic extends \stdClass
{
public function
__call($key, $params)
{
if ( ! isset(
$this->{$key})) {
throw new
Exception("Call to undefined method " . __CLASS__ . "::" . $key . "()");
}

return
call_user_func_array($this->{$key}, $params);
}
}

?>

Usage examples:
<?php
$dynamic
= new Dynamic();
$dynamic->myMethod = "thatFunction";
$dynamic->hisMethod = array($dynamic, "randomInt");
$dynamic->newMethod = array(SomeClass, "staticMethod");
$dynamic->anotherMethod = function () {
echo
"Hey there";
};
$dynamic->randomInt = function ($min, $max) {
return
mt_rand($min, $max); // random_int($min, $max); // <-- PHP7+
};

var_dump(
$dynamic->randomInt(1, 11),
$dynamic->anotherMethod(),
$dynamic->hisMethod()
);

?>
up
3
Ashley Dambra
10 years ago
Here a simple class that allow to set anonymous function. It's an optimised class of stdClass.

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

public function
__call($method, $arguments) {
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}()");
}
}
}

$person = new stdObject(array(
"name" => "nick",
"age" => 23,
"friends" => array("frank", "sally", "aaron"),
"sayHi" => function() {
return
"Hello there";
}
));

$person->sayHi2 = function() {
return
"Hello there 2";
};

$person->test = function() {
return
"test";
};

var_dump($person->name, $person->test(), $person->sayHi2());
?>
To Top