Je construis une classe avec un certain nombre de validations d'entrée, et j'ai décidé de les placer dans une méthode __set (je ne suis pas sûr que ce soit la bonne forme car j'ai limité Expérience OOP). Cela semble fonctionner correctement, en jetant les erreurs appropriées lorsque les valeurs non valides sont transmises de l'extérieur de la classe. Cependant, si une variable est modifiée dans la classe, la méthode _ _set semble être complètement ignorée.PHP ignorant la méthode __set à l'intérieur de la classe
Toute idée serait extrêmement apprécié
//RESULT:::::::::::::::::::::::::::::::
// PASS: Testing : hello
// PASS: Testing exception handling
// __SET: Setting b to 123
// PASS: Testing with valid value: 123
// FAIL: Testing exception handling World2
<?php
class Test {
public $a;
private $b;
function __set($key, $val) {
switch($key) {
case 'b':
if(!is_numeric($val)) throw new Exception("Variable $b must be numeric");
break;
}
echo ("__SET: Setting {$key} to {$val}<br/>");
$this->$key = $val;
}
function __get($key) { return $this->$key; }
function bMethod() {
$this->b = "World2";
}
}
$t = new Test();
//testing a
try {
$t->a = "hello";
echo "PASS: Testing $a: {$t->a}<br/>";
} catch(Exception $e) {
echo "FAIL: Testing $a";
}
//testing b
try {
$t->b = "world";
echo "FAIL: Testing $b exception handling<br/>";
} catch(Exception $e){
echo "PASS: Testing $b exception handling<br/>";
}
//testing b with valid value
try {
$t->b = 123;
echo "PASS: Testing $b with valid value: {$t->b}<br/>";
} catch(Exception $e) {
echo "FAIL: Testing $b";
}
//bypassing exception handling with method
try {
$t->bMethod("world");
echo "FAIL: Testing $b exception handling {$t->b}<br/>";
} catch(Exception $e) {
echo "PASS: Testing $b exception handling<br/>";
}
Cela me avait foxed pendant au moins une heure ... – Jonathan