09/10/2018, 23:28
[Q] PHP Object iteration
PHP Sample
Output
Vấn đề đặt ra là nếu muốn hàm iterateVisible() chỉ list ra các member có scope là protected hay private thì phải làm thế nào? Hiện giờ ngoài cách đặt prefix thì tôi vẫn chưa nghĩ ra cách nào khả thi. Anh em ai có cao kiến gì ko?
PHP Code:
<?php
class MyClass
{
public $var1 = 'value 1';
public $var2 = 'value 2';
public $var3 = 'value 3';
protected $protected = 'protected var';
private $private = 'private var';
function iterateVisible() {
echo "MyClass::iterateVisible:
";
foreach($this as $key => $value) {
print "$key => $value
";
}
}
}
$class = new MyClass();
foreach($class as $key => $value) {
print "$key => $value
";
}
echo "
";
$class->iterateVisible();
?>
PHP Code:
var1 => value 1
var2 => value 2
var3 => value 3
MyClass::iterateVisible:
var1 => value 1
var2 => value 2
var3 => value 3
protected => protected var
private => private var
Bài liên quan
class Test {
var $x = 0;
var $y = 0;
}
$test = new Test();
foreach ($test as $k => $v) echo "$k => $v \n";
Vì nó nôm na như thế cho nên người đọc cứ ngỡ nó là điểm đặc biệt của PHP5. Kì thực các bác viết PHP Manual làm người đọc hiểu lầm. Iteration sẽ là đặc biệt của PHP5 nếu như ví dụ trên dùng ArrayObject và ArrayIterator. Tuy nhiên kì thực thì các bác lúc viết đã dùng một đặc điểm của PHP: Object là một mảng các properties. Mà cái đó thì PHP4 và PHP5 đều như nhau.
Khi nào thực hiện iterating qua một đối tượng mà dùng đến các lớp Iterator trong SPL thì đó mới là PHP5