PHP 4 中对象的比较
在 PHP 4 中,對象比較的規則十分簡單:如果兩個對象的類相同,且它們有相同的屬性和值,則這兩個對象相等。類似的規則還適用與用全等符(===)對兩個對象的比較。
如果我們執行以下范例中的代碼: If we were to execute the code in the example below: 例子 13-1. PHP 4 中對象比較范例
<?php
function bool2str($bool) {
??? if ($bool === false) {
??????????? return 'FALSE';
??? } else {
??????????? return 'TRUE';
??? }
}
function compareObjects(&$o1, &$o2) {
??? echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n";
??? echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n";
??? echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n";
??? echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n";
}
class Flag {
??? var $flag;
??? function Flag($flag=true) {
??????????? $this->flag = $flag;
??? }
}
class SwitchableFlag extends Flag {
??? function turnOn() {
??????? $this->flag = true;
??? }
??? function turnOff() {
??????? $this->flag = false;
??? }
}
$o = new Flag();
$p = new Flag(false);
$q = new Flag();
$r = new SwitchableFlag();
echo "Compare instances created with the same parameters\n";
compareObjects($o, $q);
echo "\nCompare instances created with different parameters\n";
compareObjects($o, $p);
echo "\nCompare an instance of a parent class with one from a subclass\n";
compareObjects($o, $r);
?>?
?
我們將得到: Compare instances created with the same parameters
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Compare instances created with different parameters
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Compare an instance of a parent class with one from a subclass
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
?
這和我們按照比較規則推測的結果一致。當且僅當出自同一個類且屬性及其值都相同的對象被認為是相等且相同的。
即時在有對象組合的時候,比較的規則也相同。在以下的范例中我們建立一個容器類來儲存 Flag 對象的一個相關數組。 例子 13-2. PHP 4 中復合對象的比較
<?php
class FlagSet {
??? var $set;
??? function FlagSet($flagArr = array()) {
??????? $this->set = $flagArr;
??? }
??? function addFlag($name, $flag) {
??????? $this->set[$name] = $flag;
??? }
??? function removeFlag($name) {
??????? if (array_key_exists($name, $this->set)) {
??????????? unset($this->set[$name]);
??????? }
??? }
}
$u = new FlagSet();
$u->addFlag('flag1', $o);
$u->addFlag('flag2', $p);
$v = new FlagSet(array('flag1'=>$q, 'flag2'=>$p));
$w = new FlagSet(array('flag1'=>$q));
echo "\nComposite objects u(o,p) and v(q,p)\n";
compareObjects($u, $v);
echo "\nu(o,p) and w(q)\n";
compareObjects($u, $w);
?>?
?
我們得到預期的結果: Composite objects u(o,p) and v(q,p)
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
u(o,p) and w(q)
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
?
?
轉載于:https://www.cnblogs.com/zwww/archive/2011/10/25/2223973.html
總結
以上是生活随笔為你收集整理的PHP 4 中对象的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雅虎团队经验:网站页面性能优化的 34条
- 下一篇: 解决方案:用户 'sa' 登录失败。原因