Quel est le processus de fonctionnement de __set() ?
葫芦娃平衡盘
葫芦娃平衡盘 2017-08-11 22:04:09
0
2
1279

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 ?

葫芦娃平衡盘
葫芦娃平衡盘

répondre à tous(2)
DayDayUp
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


DayDayUp

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;
    }


.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal