php 대상을 훑어보는 방법
답은 긍정적이지만, 대상의 반복은 공공적 속성만 얻을 수 있다는 조건이 있다.
//
class A
{
public $a1 = '1';
public $a2 = '2';
public $a3 = '3';
private $a4 = '4';
protected $a5 = '5';
public $a6 = '6';
public function test()
{
echo 'test';
}
}
$a = new A();
foreach ($a as $k => $v) {
echo $k, '===', $v, PHP_EOL;
}
// a1===1
// a2===2
// a3===3
// a6===6
방법이든 보호받거나 개인적인 변수든 두루 훑어볼 수 없다.공공의 속성만이 두루 퍼질 수 있다.사실 우리가 이전에 디자인 모델을 이야기할 때 말했던 교체기 모델은 대상을 훑어보는 데 사용된 것이고 PHP는 이미 우리를 위해 관련 인터페이스를 준비했기 때문에 우리는 이 인터페이스를 실현하기만 하면 교체기 모델의 창설을 완성할 수 있다.구체적인 내용은 이전의 디자인 모델 시리즈를 참고할 수 있다PHP 디자인 모드의 교체기 모드
//
class B implements Iterator
{
private $var = [];
public function __construct($array)
{
if (is_array($array)) {
$this->var = $array;
}
}
public function rewind()
{
echo "rewinding
";
reset($this->var);
}
public function current()
{
$var = current($this->var);
echo "current: $var
";
return $var;
}
public function key()
{
$var = key($this->var);
echo "key: $var
";
return $var;
}
public function next()
{
$var = next($this->var);
echo "next: $var
";
return $var;
}
public function valid()
{
$var = $this->current() !== false;
echo "valid: {$var}
";
return $var;
}
}
$b = new B([1, 2, 3, 4]);
foreach ($b as $k => $v) {
echo $k, '===', $v, PHP_EOL;
}
// rewinding
// current: 1
// valid: 1
// current: 1
// key: 0
// 0===1
// next: 2
// current: 2
// valid: 1
// current: 2
// key: 1
// 1===2
// next: 3
// current: 3
// valid: 1
// current: 3
// key: 2
// 2===3
// next: 4
// current: 4
// valid: 1
// current: 4
// key: 3
// 3===4
// next:
// current:
// valid:
만약 오늘의 문장이 이전에 말한 교체기 모델만 말한다면 너무 재미없기 때문에 우리는 더욱 재미있는 응용을 배워야 한다.그것은 대상이 수조처럼 조작할 수 있도록 하는 것이다.이것도 사실 PHP를 사용하여 이미 우리를 위해 준비한 인터페이스이다. Array Access.
//
class C implements ArrayAccess, IteratorAggregate
{
private $container = [];
public function __construct()
{
$this->container = [
"one" => 1,
"two" => 2,
"three" => 3,
];
}
public function offsetSet($offset, $value)
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function offsetExists($offset)
{
return isset($this->container[$offset]);
}
public function offsetUnset($offset)
{
unset($this->container[$offset]);
}
public function offsetGet($offset)
{
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
public function getIterator() {
return new B($this->container);
}
}
$c = new C();
var_dump($c);
$c['four'] = 4;
var_dump($c);
$c[] = 5;
$c[] = 6;
var_dump($c);
foreach($c as $k=>$v){
echo $k, '===', $v, PHP_EOL;
}
// rewinding
// current: 1
// valid: 1
// current: 1
// key: one
// one===1
// next: 2
// current: 2
// valid: 1
// current: 2
// key: two
// two===2
// next: 3
// current: 3
// valid: 1
// current: 3
// key: three
// three===3
// next: 4
// current: 4
// valid: 1
// current: 4
// key: four
// four===4
// next: 5
// current: 5
// valid: 1
// current: 5
// key: 0
// 0===5
// next: 6
// current: 6
// valid: 1
// current: 6
// key: 1
// 1===6
// next:
// current:
// valid:
이 인터페이스는 우리가 네 가지 방법을 실현해야 한다.테스트 코드:github.com/zhangyue050…
이상은 php가 대상을 훑어보는 방법의 상세한 내용입니다. php가 대상을 훑어보는 것에 대한 더 많은 자료는 저희 다른 관련 문장에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.