के अंदर __set विधि को अनदेखा कर रहा है PHP मैं कई इनपुट सत्यापन के साथ एक कक्षा बना रहा हूं, और मैंने उन्हें __set विधि के अंदर रखने का निर्णय लिया है (मुझे यकीन नहीं है कि यह उचित रूप है क्योंकि मेरे पास सीमित है ओओपी अनुभव)। ऐसा लगता है कि वर्ग के बाहर से अमान्य मूल्य पारित होने पर उचित त्रुटियों को फेंकना ठीक लगता है। हालांकि, यदि वर्ग के अंदर एक चर संशोधित किया गया है तो _ _set विधि को पूरी तरह से अनदेखा किया जा रहा है।कक्षा
किसी भी अंतर्दृष्टि बेहद सराहना की जाएगी
//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