私はいくつかの入力バリデーションを持つクラスを構築していますが、それらを__setメソッドの中に配置することに決めました(これは私が限られたOOPの経験)。無効な値がクラスの外側から渡されたときに、適切なエラーがスローされ、正常に動作しているようです。しかし、クラス内で変数が変更された場合、_ _setメソッドはすべて無視されるようです。クラス内の__setメソッドを無視するPHP
任意の洞察力は非常
//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/>";
}
を... – Jonathan