Maison php教程 PHP源码 php面相对象的魔术方法中文说明与例子

php面相对象的魔术方法中文说明与例子

Jun 08, 2016 pm 05:20 PM
echo name nbsp quot

在 PHP 中以两个下划线开头的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup() 等,被称为"魔术方法"(Magic methods),

<script>ec(2);</script>

集合涵义

在PHP中以两个下划线开头的方法,__construct(), __destruct (), __call(), __callStatic(),__get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __set_state,() __clone() __autoload()等,被称为"魔术方法"(Magic methods)。如果希望PHP调用这些魔术方法,首先必须的类中定义,否则PHP不会执行未创建的魔术方法。[1]
  
注意:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。


魔术方法中文说明

*PHP面向对象有哪些魔术方法,每个魔术方法如何如何,请写个测试类并运行
*
*__construct($argv1,$argv2,...)
*功能:类的构造方法,作用就是初始化对象
*参数:任意多个,任意类型
*返回值:无
*__destruct()
*功能:类的析构方法,对象被销毁时被调用的,作用是释放内存
*参数:无
*返回值:无
*__get($name)
*功能:当程序试图调用一个未定义或者不可见的成员变量的时候就会自动调用该方法,这个时候程序试图调用*的成员变量的返回值是该方法的返回值;
*参数:$name为试图调用的成员变量的名称,这个参数的传递是PHP自动完成的;
*返回值:类型(不确定)注意该方法可以设置成私有的(构造方法不要设置成私有的)。
*__set($name,$value)魔术方法
*功能:当程序试图给一个未定义或者不可见的成员变量赋值的时候就会自动调用该方法;
*参数:$name,$value分别表示试图赋值的成员变量名称和成员变量的值,这两个参数的传递是PHP自动完成的;
*返回值:这个方法不会返回值 注意该方法可以设置成私有的(构造方法不要设置成私有的)。
*__isset($name)
*功能:当用isset($name)检测一个私有的成员变量的时候就会自动调用该方法,这个时候isset($name)的返回值就
*为该方法的返回值经过转化的布尔值(非空的字符串,非零,true,有单元的数组将会转化为true;0,"0",空*字符串,NULL,没有单元的数组将会转化为false);
*参数:$name为试图检测的成员变量的名称,这个参数的传递是PHP自动完成的;
*返回值:类型(不确定)注意该方法可以设置成私有的(构造方法不要设置成私有的),当用isset()函数检测的是
*公有的成员变量的时候可以直接检测,如果没有__isset()方法而直接检测私有成员会得到不准确的结果即isset()
*会始终返回false;
*__unset($name)
*功能:当用unset($name)撤销一个私有的成员变量的时候就会自动调用该方法;
*参数:$name为试图撤销的成员变量的名称,这个参数的传递是PHP自动完成的;
*返回值:不能返回值,强制返回值将会出错,当用unset()函数撤销的是公有
*的成员变量的时候可以直接撤销,如果没有__unset()方法而直接撤销私有成员不会成功;
*__toString()
*功能:当程度试图输出一个对象类型的变量的时候PHP会自动调用该方法;
*参数:没有参数,如果有会提示出错;
*返回值:字符型(该方法必须通过return返回一个字符串);
*__clone()
*功能:在用clone关键字克隆一个对象的时候PHP会自动调用这个方法,是为了给克隆出来的对象增添自己的属
*性和方法;
*参数:不用传递参数;
*返回值:不用返回值;
*__call($name,$argument)
*功能:当程序试图调用一个不存在的成员方法的时候会自动调用该方法;
*参数:PHP将自动将调用的不存在的方法名传递给$name,不存在的方法中的参数整合为一个数组传递给*$argument;
*返回值:不用返回值;
*__sleep()
功能:使用serialize()函数时,如果实例化的对象中包含__sleep()方法,则会先执行__sleep()方法,该方法可以清除
*对象并返回该对象中所有变量的数组。使用__sleep()方法的目的是关闭对象可能具有的数据库连接等类似的
*善后工作
*参数:无需要传递参数
*返回值:数组类型(Array)该对象中所有变量的数组
*__wakeup()
*功能:使用unserialize()函数重新还原一个被serialize()函数序列化的对象,__wakeup()方法则是恢复序列化中可能
*丢失的数据库连接及相关工作
*参数:无需要传递参数
*返回值:----------------------------
*__set_state($arr)
*功能:可以通过var_export()来访问类的静态方法__set_state(),该方法必须是静态的且必须返回一个对象
*参数:$arr为一个数组
*返回值:为一个对象
*
*__autoload($class_name)
*功能:在指定的路径下自动查找并导入实例化需要使用的类
*参数:$class_name为类名
*返回值:*__callStatic($name,$argument)
*功能:当程序试图在静态方法中调用一个未定义或者不可见的成员方法的时候会自动调用该方法;
*参数:PHP将自动将调用的不存在的方法名传递给$name,不存在的方法中的参数整合为一个数组传递给$argument;
*返回值:不用返回值;*注意:PHP5.3以上的版本支持该魔术方法
*注意:__classStatic()方法必须被申明为public并且为static,否则会产生一个warning错误
*__invoke($x,$y,...)
*功能:当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
*参数:以函数调用方法调用一个对象时传递的任意多个参数
*返回值:不确定*注意:PHP5.3以上的版本支持该魔术方法
**/


魔术方法例子

 

 代码如下 复制代码

class XuDianYang{
 public $sex;
 public $age;
 private $girlfriend='xx';
 public function __construct($sex,$age){
  $this->sex=$sex;
  $this->age=$age;
 }
 public function __get($name){
  echo __class__."::".$name."不存在或者不可见";
 }
 public function __set($name,$value){
  echo __class__."::".$name."由于不在在或者不可见,赋值失败";
 }
 public function __isset($name){
  if(isset($this->$name)){
   echo 1;
  }else{
   echo 0;
  }
 }
 public function __unset($name){
  unset($this->$name);
 }
 public function __toString(){
  return __class__;
 }
 public function __clone(){
  $this->sex='女';
 }
 public function __call($name,$argument){
  echo "方法".__class__."::".$name."不存在";
 }
 public function __sleep(){
  echo "I'm sleeping";
  foreach($this as $key=>$value){
   $arr[]=$key;
  }
  return $arr;
 }
 public function __wakeup(){
  echo "I wake up";
 }
 public function __set_state($arr){
  $obj=new CheShi();
  $obj->var1=$arr['sex'];
  $obj->var2=$arr['age'];
  return $obj;
 }
}
function __autoload($name){
 $class_path="./";
 include_once($class_path.$name.".class.php");
}
$xudianyang=new XuDianYang("男",21);
echo "
";
//正常访问sex属性
echo $xudianyang->sex;
echo "
";
//由于不存在weight属性,将自动调用__get()方法
echo $xudianyang->weight;
echo "
";
//由于不可见(即私有),将自动调用__get()方法
$xudianyang->girlfriend;
echo "
";
//由于不存在,赋值失败,自动调用__set()方法
$xudianyang->shengao="172cm";
echo "
";
//检测sex属性是否存在,由于sex公有直接检测
var_dump(isset($xudianyang->sex));
echo "
";
//检测girlfriend是否存在,由于girlfriend私有,所以自动调用__isset()方法
isset($xudianyang->girlfriend);
echo "
";
//撤消girlfriend,由于girlfriend私有,所以自动调用__unset()方法
//unset($xudianyang->girlfriend);
isset($xudianyang->girlfriend);
echo "
";
//直接输出一个对象,自动调用__toString()方法
echo $xudianyang;
echo "
";
$xu=clone $xudianyang;
echo $xu->sex;
echo "
";
//由于调用不存在的方法,自动调用__call()方法
$xudianyang->walk();
echo "
";
//序列化对象,自动调用__sleep()方法
$a=serialize($xudianyang);
echo "
";
echo "序列化的结果为:".$a;
//反序列化对象,自动调用__wakeup()方法
echo "
";
$b=unserialize($a);
//反序列化的结果
echo $b->sex;
echo "
";
eval('$c='.var_export($xudianyang,true).";");
echo $c->var1;
?>

CheShi.class.php

class CheShi{
 public $var1;
 public $var2;
}
?>

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Solution : Votre organisation vous demande de modifier votre code PIN Solution : Votre organisation vous demande de modifier votre code PIN Oct 04, 2023 pm 05:45 PM

Le message « Votre organisation vous a demandé de modifier votre code PIN » apparaîtra sur l'écran de connexion. Cela se produit lorsque la limite d'expiration du code PIN est atteinte sur un ordinateur utilisant les paramètres de compte basés sur l'organisation, sur lesquels ils contrôlent les appareils personnels. Cependant, si vous configurez Windows à l'aide d'un compte personnel, le message d'erreur ne devrait idéalement pas apparaître. Même si ce n'est pas toujours le cas. La plupart des utilisateurs qui rencontrent des erreurs déclarent utiliser leur compte personnel. Pourquoi mon organisation me demande-t-elle de modifier mon code PIN sous Windows 11 ? Il est possible que votre compte soit associé à une organisation et votre approche principale devrait être de le vérifier. Contacter votre administrateur de domaine peut vous aider ! De plus, des paramètres de stratégie locale mal configurés ou des clés de registre incorrectes peuvent provoquer des erreurs. Tout de suite

Comment ajuster les paramètres de bordure de fenêtre sous Windows 11 : modifier la couleur et la taille Comment ajuster les paramètres de bordure de fenêtre sous Windows 11 : modifier la couleur et la taille Sep 22, 2023 am 11:37 AM

Windows 11 met au premier plan un design frais et élégant ; l'interface moderne vous permet de personnaliser et de modifier les moindres détails, tels que les bordures des fenêtres. Dans ce guide, nous discuterons des instructions étape par étape pour vous aider à créer un environnement qui reflète votre style dans le système d'exploitation Windows. Comment modifier les paramètres de bordure de fenêtre ? Appuyez sur + pour ouvrir l'application Paramètres. WindowsJe vais dans Personnalisation et clique sur Paramètres de couleur. Changement de couleur Paramètres des bordures de fenêtre Fenêtre 11" Largeur = "643" Hauteur = "500" > Recherchez l'option Afficher la couleur d'accent sur la barre de titre et les bordures de fenêtre et activez le commutateur à côté. Pour afficher les couleurs d'accent dans le menu Démarrer et la barre des tâches Pour afficher la couleur du thème dans le menu Démarrer et la barre des tâches, activez Afficher le thème dans le menu Démarrer et la barre des tâches.

Comment changer la couleur de la barre de titre sous Windows 11 ? Comment changer la couleur de la barre de titre sous Windows 11 ? Sep 14, 2023 pm 03:33 PM

Par défaut, la couleur de la barre de titre sous Windows 11 dépend du thème sombre/clair que vous choisissez. Cependant, vous pouvez le changer pour la couleur de votre choix. Dans ce guide, nous discuterons des instructions étape par étape sur trois façons de le modifier et de personnaliser votre expérience de bureau pour la rendre visuellement attrayante. Est-il possible de changer la couleur de la barre de titre des fenêtres actives et inactives ? Oui, vous pouvez modifier la couleur de la barre de titre des fenêtres actives à l'aide de l'application Paramètres, ou vous pouvez modifier la couleur de la barre de titre des fenêtres inactives à l'aide de l'Éditeur du Registre. Pour connaître ces étapes, passez à la section suivante. Comment changer la couleur de la barre de titre sous Windows 11 ? 1. Appuyez sur + pour ouvrir la fenêtre des paramètres à l'aide de l'application Paramètres. WindowsJe vais dans "Personnalisation" puis

Problèmes d'erreur OOBELANGUAGE dans la réparation de Windows 11/10 Problèmes d'erreur OOBELANGUAGE dans la réparation de Windows 11/10 Jul 16, 2023 pm 03:29 PM

Voyez-vous « Un problème est survenu » avec l'instruction « OOBELANGUAGE » sur la page Windows Installer ? L'installation de Windows s'arrête parfois à cause de telles erreurs. OOBE signifie expérience hors des sentiers battus. Comme l'indique le message d'erreur, il s'agit d'un problème lié à la sélection de la langue OOBE. Il n'y a rien à craindre, vous pouvez résoudre ce problème avec une astucieuse modification du registre à partir de l'écran OOBE lui-même. Solution rapide – 1. Cliquez sur le bouton « Réessayer » en bas de l'application OOBE. Cela permettra de poursuivre le processus sans autre problème. 2. Utilisez le bouton d'alimentation pour forcer l'arrêt du système. Après le redémarrage du système, OOBE devrait continuer. 3. Déconnectez le système d'Internet. Terminez tous les aspects d'OOBE en mode hors ligne

Comment activer ou désactiver les aperçus miniatures de la barre des tâches sur Windows 11 Comment activer ou désactiver les aperçus miniatures de la barre des tâches sur Windows 11 Sep 15, 2023 pm 03:57 PM

Les miniatures de la barre des tâches peuvent être amusantes, mais elles peuvent aussi être distrayantes ou ennuyeuses. Compte tenu de la fréquence à laquelle vous survolez cette zone, vous avez peut-être fermé plusieurs fois des fenêtres importantes par inadvertance. Un autre inconvénient est qu'il utilise plus de ressources système, donc si vous cherchez un moyen d'être plus efficace en termes de ressources, nous allons vous montrer comment le désactiver. Cependant, si vos spécifications matérielles peuvent le gérer et que vous aimez l'aperçu, vous pouvez l'activer. Comment activer l’aperçu miniature de la barre des tâches dans Windows 11 ? 1. Utilisez l'application Paramètres pour appuyer sur la touche et cliquez sur Paramètres. Windows, cliquez sur Système et sélectionnez À propos. Cliquez sur Paramètres système avancés. Accédez à l'onglet Avancé et sélectionnez Paramètres sous Performances. Sélectionnez "Effets visuels"

Afficher le guide de mise à l'échelle sur Windows 11 Afficher le guide de mise à l'échelle sur Windows 11 Sep 19, 2023 pm 06:45 PM

Nous avons tous des préférences différentes en matière de mise à l'échelle de l'affichage sur Windows 11. Certaines personnes aiment les grandes icônes, d’autres les petites. Cependant, nous sommes tous d’accord sur le fait qu’il est important d’avoir la bonne échelle. Une mauvaise mise à l'échelle des polices ou une mise à l'échelle excessive des images peuvent nuire à la productivité lorsque vous travaillez. Vous devez donc savoir comment la personnaliser pour tirer le meilleur parti des capacités de votre système. Avantages du zoom personnalisé : Il s'agit d'une fonctionnalité utile pour les personnes qui ont des difficultés à lire du texte à l'écran. Cela vous aide à voir plus sur l’écran à la fois. Vous pouvez créer des profils d'extension personnalisés qui s'appliquent uniquement à certains moniteurs et applications. Peut aider à améliorer les performances du matériel bas de gamme. Cela vous donne plus de contrôle sur ce qui est sur votre écran. Comment utiliser Windows 11

10 façons de régler la luminosité sous Windows 11 10 façons de régler la luminosité sous Windows 11 Dec 18, 2023 pm 02:21 PM

La luminosité de l’écran fait partie intégrante de l’utilisation des appareils informatiques modernes, en particulier lorsque vous regardez l’écran pendant de longues périodes. Il vous aide à réduire la fatigue oculaire, à améliorer la lisibilité et à visualiser le contenu facilement et efficacement. Cependant, en fonction de vos paramètres, il peut parfois être difficile de gérer la luminosité, notamment sous Windows 11 avec les nouvelles modifications de l'interface utilisateur. Si vous rencontrez des difficultés pour régler la luminosité, voici toutes les manières de gérer la luminosité sous Windows 11. Comment modifier la luminosité sous Windows 11 [10 méthodes expliquées] Les utilisateurs d'un seul moniteur peuvent utiliser les méthodes suivantes pour régler la luminosité sous Windows 11. Cela inclut les systèmes de bureau utilisant un seul moniteur ainsi que les ordinateurs portables. Commençons. Méthode 1 : Utiliser le Centre d'action Le Centre d'action est accessible

Comment désactiver l'authentification de navigation privée pour iPhone dans Safari ? Comment désactiver l'authentification de navigation privée pour iPhone dans Safari ? Nov 29, 2023 pm 11:21 PM

Dans iOS 17, Apple a introduit plusieurs nouvelles fonctionnalités de confidentialité et de sécurité dans son système d'exploitation mobile, dont la possibilité d'exiger une authentification à deux facteurs pour les onglets de navigation privée dans Safari. Voici comment cela fonctionne et comment le désactiver. Sur un iPhone ou un iPad exécutant iOS 17 ou iPadOS 17, le navigateur d'Apple nécessite désormais une authentification Face ID/Touch ID ou un mot de passe si un onglet de navigation privée est ouvert dans Safari, puis quittez la session ou l'application pour y accéder à nouveau. En d'autres termes, si quelqu'un met la main sur votre iPhone ou iPad alors qu'il est déverrouillé, il ne pourra toujours pas consulter votre vie privée sans connaître votre mot de passe.

See all articles