php教程之魔术方法的使用示例(php魔术函数)_php实例
/** PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以你定义自己的类方法时,不要以 __为前缀。 * */
// __toString、__set、__get__isset()、__unset()
/*
The __toString method allows a class to decide how it will react when it is converted to a string.
__set() is run when writing data to inaccessible members.
__get() is utilized for reading data from inaccessible members.
__isset() is triggered by calling isset() or empty() on inaccessible members.
__unset() is invoked when unset() is used on inaccessible members.
*/
class TestClass {
private $data = array();
public $foo;
public function __construct($foo) {
$this->foo = $foo;
}
public function __toString() {
return $this->foo;
}
public function __set($name, $value) {
echo "__set, Setting '$name' to '$value'\n";
$this->data[$name] = $value;
}
public function __get($name) {
echo "__get, Getting '$name'\n";
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
}
/** As of PHP 5.1.0 */
public function __isset($name) {
echo "__isset, Is '$name' set?\n";
return isset($this->data[$name]);
}
/** As of PHP 5.1.0 */
public function __unset($name) {
echo "__unset, Unsetting '$name'\n";
unset($this->data[$name]);
}
}
$obj = new TestClass('Hello');
echo "__toString, $obj\n";
$obj->a = 1;
echo $obj->a . "\n\n";
var_dump(isset($obj->a));
unset($obj->a);
var_dump(isset($obj->a));
echo "\n\n";
/**
输出结果如下:
__toString, Hello
__set, Setting 'a' to '1'
__get, Getting 'a'
__isset, Is 'a' set?
bool(true)
__unset, Unsetting 'a'
__isset, Is 'a' set?
bool(false)
**/
// __call __callStatic
/*
mixed __call ( string $name , array $arguments )
mixed __callStatic ( string $name , array $arguments )
__call() is triggered when invoking inaccessible methods in an object context.
__callStatic() is triggered when invoking inaccessible methods in a static context.
The $name argument is the name of the method being called.
The $arguments argument is an enumerated array containing the parameters passed to the $name'ed method.
*/
class MethodTest {
public function __call($name, $arguments) {
// Note: value of $name is case sensitive.
echo "__call, Calling object method '$name' " . implode(', ', $arguments) . "\n";
}
/** As of PHP 5.3.0 */
public static function __callStatic($name, $arguments) {
// Note: value of $name is case sensitive.
echo "__callStatic, Calling static method '$name' " . implode(', ', $arguments) . "\n";
}
}
$obj = new MethodTest;
$obj->runTest('in object context', 'param2', 'param3');
//MethodTest::runTest('in static context'); // As of PHP 5.3.0
echo "\n\n";
/**
输出结果如下:
__call, Calling object method 'runTest' in object context, param2, param3
string(10) "__invoke: "
*/
// __invoke
/*
The __invoke method is called when a script tries to call an object as a function.
Note: This feature is available since PHP 5.3.0.
*/
class CallableClass {
function __invoke($x) {
var_dump($x);
}
}
$obj = new CallableClass;
//$obj(5);
var_dump('__invoke: ' . is_callable($obj));
echo "\n\n";
// __sleep __wakeup
/*
串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输.
然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法.
有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.
当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法.
这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值.
如果没有__sleep方法,PHP将保存所有属性.下面的例子显示了如何用__sleep和__wakeup方法来串行化一个对象.
Id属性是一个不打算保留在对象中的临时属性. __sleep方法保证在串行化的对象中不包含id属性.
当反串行化一个User对象,__wakeup方法建立id属性的新值. 这个例子被设计成自我保持.
在实际开发中,你可能发现包含资源(如图像或数据流)的对象需要这些方法
*/
class User {
public $name;
public $id;
function __construct() {
//give user a unique ID 赋予一个差别 的ID
$this->id = uniqid();
}
//__sleep返回值的类型是数组,数组中的值是不需要串型化的字段id
function __sleep() {
//do not serialize this->id 不串行化id
return(array("name"));
}
function __wakeup() {
//give user a unique ID
$this->id = uniqid();
}
}
//create object 成立一个器材
$u = new User;
$u->name = "Leon"; //serialize it 串行化 留意不串行化id属性,id的值被遗弃
$s = serialize($u);
echo "__sleep, __wakeup, s: $s"; //unserialize it 反串行化 id被重新赋值
$u2 = unserialize($s); //$u and $u2 have different IDs $u和$u2有差别 的ID
print_r($u);
print_r($u2);
echo "\n\n";
/**
输出结果如下:
__sleep, __wakeup, s: O:4:"User":1:{s:4:"name";s:4:"Leon";}
User Object
(
[name] => Leon
[id] => 4db1b17640da1
)
User Object
(
[name] => Leon
[id] => 4db1b17640dbc
)
*/
// __set_state
/*
This static method is called for classes exported by var_export() since PHP 5.1.0.
The only parameter of this method is an array containing exported properties in the form array('property' => value, ...).
*/
class A {
public $var1;
public $var2;
public static function __set_state($an_array) { // As of PHP 5.1.0
//$an_array打印出来是数组,而不是调用时传递的对象
print_r($an_array);
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}
$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
echo "__set_state:\n";
eval('$b = ' . var_export($a, true) . ';');
// $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);
echo "\n\n";
/**
输出结果如下:
__set_state:
Array
(
[var1] => 5
[var2] => foo
)
object(A)#5 (2) {
["var1"]=>
int(5)
["var2"]=>
string(3) "foo"
}
*/
// __clone
class SubObject {
static $instances = 0;
public $instance;
public function __construct() {
$this->instance = ++self::$instances;
}
public function __clone() {
$this->instance = ++self::$instances;
}
}
class MyCloneable {
public $object1;
public $object2;
function __clone() {
// Force a copy of this->object, otherwise
// it will point to same object.
$this->object1 = clone $this->object1;
}
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("__clone, Original Object:\n");
print_r($obj);
print("__clone, Cloned Object:\n");
print_r($obj2);
echo "\n\n";
/**
输出结果如下:
__clone, Original Object:
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => 1
) [object2] => SubObject Object
(
[instance] => 2
))
__clone, Cloned Object:
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => 3
) [object2] => SubObject Object
(
[instance] => 2
))
*/

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Bases de la métaprogrammation Python La métaprogrammation Python est la capacité de manipuler dynamiquement le code Python, ce qui fait de Python un langage très puissant. La métaprogrammation peut être implémentée des manières suivantes : Décorateur de classe : Un décorateur de classe est un décorateur qui modifie la définition d'une classe. Il peut être utilisé pour ajouter ou modifier les propriétés et méthodes d'une classe, et peut également être utilisé pour contrôler le processus d'instanciation d'une classe. defadd_method_to_class(cls):defnew_method(self):print("Thisisanewmethod")setattr(cls,"new_method",new_method)returncls@a

Tutoriel PHP et phpSpider : Comment démarrer rapidement ? Introduction : À l'ère actuelle d'explosion de l'information, nous parcourons chaque jour un grand nombre de pages Web et de sites Web. Parfois, nous pouvons avoir besoin d'explorer des données spécifiques à partir de pages Web à des fins d'analyse et de traitement. Cela nécessite l'utilisation d'un robot d'exploration Web (WebSpider) pour explorer automatiquement le contenu Web. PHP est un langage de programmation très populaire et phpSpider est un puissant framework PHP conçu pour créer et gérer des robots d'exploration Web. Cet article explique comment utiliser PHP

Dans le développement PHP, les méthodes de réflexion et magiques sont deux techniques couramment utilisées. Lorsque nous devons générer automatiquement du code ou appeler dynamiquement certaines fonctions, les méthodes de réflexion et de magie peuvent rendre notre code plus flexible et plus efficace. Dans cet article, nous explorerons comment utiliser les méthodes de réflexion et de magie pour réaliser une génération automatique de code et un appel dynamique. Reflection est un outil puissant fourni par PHP, qui peut nous aider à obtenir des informations telles que des classes, des méthodes et des propriétés lorsque le programme est en cours d'exécution. Grâce à la réflexion, nous pouvons obtenir dynamiquement des informations telles que des méthodes, des propriétés et des annotations d'une classe ou d'un objet, afin que

Qu'est-ce qu'une méthode magique ? Comment l’utiliser dans Laravel ? L'article suivant vous présentera comment appliquer les méthodes magiques PHP dans Laravel. J'espère qu'il vous sera utile !

L'ordre d'exécution des méthodes magiques PHP suit les règles suivantes : les méthodes magiques avec une priorité élevée sont exécutées en premier. Si la sous-classe et la classe parent définissent des méthodes magiques portant le même nom, la méthode magique de la sous-classe sera exécutée en premier. Si une classe définit à la fois une méthode régulière et une méthode magique portant le même nom, la méthode régulière sera exécutée en premier.

Qu'est-ce qu'une méthode magique ? Cet article vous présentera 16 méthodes magiques que les développeurs PHP doivent connaître. J'espère que cela vous sera utile !

PHP est un langage de script côté serveur développé sur la base du langage C, largement utilisé dans le développement Web. Les fonctions sont l'un des composants les plus basiques et les plus couramment utilisés dans les programmes. PHP fournit également de nombreuses méthodes magiques liées aux fonctions, qui peuvent aider les développeurs à mieux tirer parti des fonctions. Dans cet article, nous présenterons les méthodes magiques des fonctions PHP et leur utilisation. __construct()__construct() est l'une des méthodes magiques les plus couramment utilisées en PHP. Elle est automatiquement appelée lors de la création d'un objet pour l'initialisation.

Méthodes magiques : comprenez les méthodes de base telles que __construct et __destruct en PHP. Dans le langage PHP, il existe des méthodes spéciales appelées « méthodes magiques », notamment __construct, __destruct, etc. Ces méthodes jouent un rôle important dans la programmation orientée objet en PHP. Cet article expliquera le rôle et l'application pratique de ces méthodes. La méthode __construct __construct est une méthode très importante, elle est en PHP
