recherche

Maison  >  Questions et réponses  >  le corps du texte

Quel est le processus de fonctionnement de __set() ?

dôme de classe{
private $age;
public function __construct($age){

$this->age =$age;
}
public function __set($name,$value){

if($name =='âge')
                                                                                                                                                                                                                               {return false; gt;age=25;and
                                                                                                                             ..,                                            Dans les deux cas, les résultats de sortie doivent être la valeur par défaut 24, mais le résultat de

echo $obj-> age=25 est 25. L'âge a été modifié ? $obj->age=26; echo $obj->age; Il n'y a pas de problème avec la phrase ?

葫芦娃平衡盘葫芦娃平衡盘2666 Il y a quelques jours1288

répondre à tous(2)je répondrai

  • DayDayUp

    DayDayUp2017-08-12 16:38:41

    class demo{
        private $age;
        public function __construct($age){
                $this->age =$age;
        }
        public function __set($name,$value){
            if($name =='age'){
                return false;
            }       
            return $this->$name=$value;
        }   
    }
        $obj =new demo(24);
        echo $obj->age=25;
        $obj->age=26;
        echo $obj->age;

    Dans votre code, le deuxième écho ne doit pas être exécuté. Vous n'avez pas publié l'intégralité du code, car il vous indiquera que vous ne pouvez pas accéder aux propriétés privées

    La différence entre les deux résultats de sortie est due à la façon dont vous écrivez. echo, echo a = 3 Cette façon d'écrire exécutera l'instruction d'affectation, mais que l'affectation soit réussie ou non, le nombre à droite du signe égal sera affiché à l'écran

    1. Le premier écho $obj-. >age=25; exécute votre méthode set, on obtient que name est égal à age, et return false est exécuté, donc la valeur de l'attribut age n'est pas modifiée. Mais avec votre façon d'écrire, il affichera le 25 sur le côté droit de votre signe égal sur l'écran

    2. La deuxième façon est la manière normale d'écrire, qui exécutera l'instruction d'affectation, puis jugera et retournera faux. , sans modifier la valeur de age, puis affichez la valeur de votre attribut age est toujours 24


    répondre
    1
  • 葫芦娃平衡盘

    Compris, merci beaucoup

    葫芦娃平衡盘 · 2017-08-12 18:18:18
  • DayDayUp

    DayDayUp2017-08-12 16:00:34

    echo $obj->age=25 Cette déclaration est fausse. Vous n'avez pas modifié la valeur dans la classe. Vous venez de générer une valeur de 25.

    1 Il devrait y avoir un problème dans votre méthode set. else, il semble qu'elle manque

    2 Si vous souhaitez lire des attributs privés, vous devez écrire une autre méthode get

    if($name =='age')
            {return false;}  //没有else     
    return $this->$name=$value;
        }   
     }
         
       //正确代码
       public function __set($name,$value){
            if($name == 'age'){
                echo 'age不允许修改';
            }else{      
                return $this->$name = $value;
            } 
        } 
        
        public function __Get($name){
                return $this->$name;
        }


    .

    répondre
    0
  • Annulerrépondre