Maison développement back-end tutoriel php 腾讯php程序员面试题-15个魔术方法的总结

腾讯php程序员面试题-15个魔术方法的总结

Jul 25, 2016 am 08:59 AM

  1. 功能:在当前页使用类时自动加载该类的文件

  2. 参数$className 为类的名称 可自定义
  3. */

  4. function __autoload($className){

  5. $className=strtolower($className);//最好加上这一步,因为类首字母大写,某些系统区分文件名的大小写

  6. require("$className.class.php");//加载类文件 One.class.php Two.class.php与本文件在同一目录下

  7. echo '------------------------------
    ';//作为调用时的标记来测试

  8. }

  9. //以下两个类均未在本文件中定义

  10. $o=new One();//使用One类,对其初始化

  11. $t=new Two();//使用Two类,对其初始化

  12. ?>

复制代码

注意这个函数如果需要正常加载,需要将文件名设置成类名(推荐小写).class.php等类名和文件名有某种关联才可以,另外如果这个函数出现异常不能被Catch捕获,将会显示Fatal Error

2.__construct() 构造函数

在C#和PHP4中构造函数的函数名都是与类名相同,当然PHP5也支持这样(如果找不到__construct方法后会找函数名与类名相同的作为构造函数),之所以这样写的好处是如果我们想更改类的名字,我们就只改类名就可以,不用在更改构造函数的函数名,同时从某种程度上减少了我们出错的概率,示例代码还是简单写一下吧!

  1. class PcYoYo{

  2. private $url;

  3. function __construct($url){

  4. $this->url=$url;

  5. }

  6. }

  7. ?>

复制代码

3.__destruct() 析构函数

__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法

默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.

析构函数允许你在使用一个对象之后执行任意代码来清除内存.

当PHP决定你的脚本不再与对象相关时,析构函数将被调用.

在一个函数的命名空间内,这会发生在函数return的时候.

对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.

4.__call() 当所调用的成员方法不存在(或者没有权限)该类时调用,用于对错误后做一些操作或者提示信息

  1. //初始化一个类

  2. class Person{

  3. private $name;

  4. private $age;

  5. private $sex;

  6. function walk($hour,$minute){

  7. echo "$hour :$minute We will walk
    ";

  8. }

  9. function run(){

  10. }

  11. //使用魔术方法__call

  12. /*****

  13. 功能:在对象调用类中不存在的函数时自动调用,进行一些操作

  14. 参数:$proName 所调用函数名称 $args 参数数组 $proName ,$args 为自定义的形参可符合自己风格变动,但是这两个参数的意义是固定的

  15. *****/

  16. function __call($proName,$args){

  17. echo "The $proName doesn't exist! the parameters are";

  18. print_r($args);

  19. echo '
    ';

  20. }

  21. }// the end of class

  22. //实例化一个对象

  23. $p=new Person();

  24. //调用Person类中存在的方法

  25. $p->walk(5,39);

  26. //调用Person类中不存在的方法

  27. $p->work();//如果没有使用魔术方法__call,则程序发生错误,错误信息Fatal error: Call to undefined method Person::work() in D:/phpnow/htdocs/holiday/magic__call.php on line 29

  28. //如果使用了魔术方法__call,则在对象调用类中不存在的函数时,__call被自动调用,用来执行某些操作。

  29. ?>

复制代码

5.__clone()

该函数在对象克隆时自动调用,其作用是对克隆的副本做一些初始化操作

  1. //初始化一个类

  2. class Computer{

  3. //

  4. public $cpu='intel';

  5. private $monitor;

  6. private $keyboard;

  7. //设置魔术方法__clone()函数

  8. function __clone(){//如果不设置这个魔术方法那么克隆出来的就是一模一样的,__clone函数和类的构造函数类似都是做一些初始化操作

  9. $this->cpu='AMD';//$this指的是新创建的克隆对象

  10. }

  11. //设置析构函数,用来比较=和clone的区别

  12. function __destruct(){

  13. echo '*************************************
    ';

  14. }

  15. }// the end of the class

  16. //实例化一个对象

  17. $c1=new Computer();

  18. //使用引用的方法在添加一个引用,因为对象的引用是存放在内存中的栈内存中,如果按指针的说法,那么这样做就是在内存中有创建了一个指针指向$c1指向的对象

  19. //我们可以通过条用析构函数判断出来这样不是复制了对象

  20. $c2=$c1;

  21. //使用clone方法克隆一个对象

  22. $c3=clone $c1;

  23. //输出两者的信息比较

  24. echo $c1->cpu,'
    ';

  25. echo $c3->cpu,'
    ';

  26. ?>

复制代码

6.__get() 当所对象所调用的成员属性未声明或者级别为private或者protected等时,我们可以在这个函数里进行自己的一些操作

  1. class Person{

  2. private $name;

  3. public $nation;

  4. function __get($para){//必须有一个参数

  5. echo $para.'不存在';

  6. }

  7. }

  8. $p=new Person();

  9. $name=$p->name;//call the __get function

  10. $nation=$p->nation;//never call the __get function

  11. ?>

复制代码

7.__set() 当所对未声明或者级别为private或者protected等进行赋值时调用此函数,我们可以在这个函数里进行自己的一些操作

  1. class Pc{

  2. private $key;

  3. function __set($key,$value){//必须有两个参数一个是成员属性,另一个是值

  4. echo '对'.$key.'赋值为'.$value.'失败';

  5. }

  6. }

  7. $p=new Pc();

  8. $p->key=123;

  9. ?>

复制代码

1 2 下一页 尾页



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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Apr 06, 2025 am 12:02 AM

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

Décrivez les principes solides et comment ils s'appliquent au développement de PHP. Décrivez les principes solides et comment ils s'appliquent au développement de PHP. Apr 03, 2025 am 12:04 AM

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment déboguer le mode CLI dans phpstorm? Comment déboguer le mode CLI dans phpstorm? Apr 01, 2025 pm 02:57 PM

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Mar 31, 2025 pm 11:54 PM

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Comment envoyer une demande post contenant des données JSON à l'aide de la bibliothèque Curl de PHP? Comment envoyer une demande post contenant des données JSON à l'aide de la bibliothèque Curl de PHP? Apr 01, 2025 pm 03:12 PM

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...

See all articles