php foreach 參數(shù)強制類型轉(zhuǎn)換的問題
更新時間:2010年12月10日 14:53:30 作者:
大家都知道foreach的參數(shù)如果不是數(shù)組類型,在運行的時候 就會出現(xiàn)類似“Warning: Invalid argument supplied for foreach() in XXX”warning信息。
所以,為了防止這樣的信息出現(xiàn),我使用foreach的時候,都會把參數(shù)進行強制類型轉(zhuǎn)換,形勢如下:
foreach((array)$arr as $key => $value);
這樣做一直相安無事,就在前幾天,突然出現(xiàn)了問題。我強制類型轉(zhuǎn)換以后不能正常的調(diào)用object的方法了。
<?php
class service implements Iterator{
function __construct($service_define,$filter=null){
$this->iterator = new ArrayIterator($service_define['list']);
$this->filter = $filter;
$this->valid();
}
function current(){
return $this->current_object;
}
public function rewind() {
$this->iterator->rewind();
}
public function key() {
return $this->iterator->current();
}
public function next() {
return $this->iterator->next();
}
public function valid() {
while($this->iterator->valid()){
if($this->filter()){
return true;
}else{
$this->iterator->next();
}
};
return false;
}
private function filter(){
$current = $this->iterator->current();
if($current){
$this->current_object = new Sameple($current);
if($this->current_object){
return true;
}
}
return false;
}
}
class Sameple{
var $class_name;
function __construct($class_name = null) {
$this->class_name = $class_name;
}
function show(){
echo $this->class_name,'<br />';
}
}
$servicelist = array(
'list' => array(
'first',
'second',
'third',
'fourth',
),
);
$ser = new service($servicelist);
foreach ($ser as $s) {
$s->show();
}
/*
//執(zhí)行報錯的代碼 使用了將$ser執(zhí)行強制類型轉(zhuǎn)換操作
foreach ((array)$ser as $s) {
$s->show();
}*/
之所以出現(xiàn)這樣的問題就是,foreach不但可以遍歷數(shù)組,還可以遍歷實現(xiàn)了Iterator接口的類。
我以前只注意到了數(shù)組的情況,把實現(xiàn)了Iterator接口的類的情況給忽略了。以后一定會注意。
依次為記。
foreach((array)$arr as $key => $value);
這樣做一直相安無事,就在前幾天,突然出現(xiàn)了問題。我強制類型轉(zhuǎn)換以后不能正常的調(diào)用object的方法了。
復(fù)制代碼 代碼如下:
<?php
class service implements Iterator{
function __construct($service_define,$filter=null){
$this->iterator = new ArrayIterator($service_define['list']);
$this->filter = $filter;
$this->valid();
}
function current(){
return $this->current_object;
}
public function rewind() {
$this->iterator->rewind();
}
public function key() {
return $this->iterator->current();
}
public function next() {
return $this->iterator->next();
}
public function valid() {
while($this->iterator->valid()){
if($this->filter()){
return true;
}else{
$this->iterator->next();
}
};
return false;
}
private function filter(){
$current = $this->iterator->current();
if($current){
$this->current_object = new Sameple($current);
if($this->current_object){
return true;
}
}
return false;
}
}
class Sameple{
var $class_name;
function __construct($class_name = null) {
$this->class_name = $class_name;
}
function show(){
echo $this->class_name,'<br />';
}
}
$servicelist = array(
'list' => array(
'first',
'second',
'third',
'fourth',
),
);
$ser = new service($servicelist);
foreach ($ser as $s) {
$s->show();
}
/*
//執(zhí)行報錯的代碼 使用了將$ser執(zhí)行強制類型轉(zhuǎn)換操作
foreach ((array)$ser as $s) {
$s->show();
}*/
之所以出現(xiàn)這樣的問題就是,foreach不但可以遍歷數(shù)組,還可以遍歷實現(xiàn)了Iterator接口的類。
我以前只注意到了數(shù)組的情況,把實現(xiàn)了Iterator接口的類的情況給忽略了。以后一定會注意。
依次為記。
相關(guān)文章
PHP使用PDO創(chuàng)建MySQL數(shù)據(jù)庫、表及插入多條數(shù)據(jù)操作示例
這篇文章主要介紹了PHP使用PDO創(chuàng)建MySQL數(shù)據(jù)庫、表及插入多條數(shù)據(jù)操作,結(jié)合實例形式總結(jié)分析了php基于pdo的mysql數(shù)據(jù)庫創(chuàng)建、數(shù)據(jù)表創(chuàng)建以及多條數(shù)據(jù)插入操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-05-05php實現(xiàn)的微信分享到朋友圈并記錄分享次數(shù)功能
這篇文章主要介紹了php實現(xiàn)的微信分享到朋友圈并記錄分享次數(shù)功能,結(jié)合實例形式分析了php微信分享功能接口調(diào)用及分享次數(shù)統(tǒng)計具體操作技巧,需要的朋友可以參考下2018-01-01100行PHP代碼實現(xiàn)socks5代理服務(wù)器
這個例子說了in the real world, do something here to ensure clients not running are destroyed 但是,如何把不再運行的連接銷毀卻沒有講。恩。我試了把$clients放到一個類里,把類傳給線程類,然后在線程類要結(jié)束時把$clients里對應(yīng)的連接給unset掉,無果。2016-04-04PHP實現(xiàn)的通過參數(shù)生成MYSQL語句類完整實例
這篇文章主要介紹了PHP實現(xiàn)的通過參數(shù)生成MYSQL語句類,結(jié)合完整實例形式分析了生成MYSQL語句類的實現(xiàn)與使用技巧,需要的朋友可以參考下2016-04-04PHP統(tǒng)計目錄下的文件總數(shù)及代碼行數(shù)(去除注釋及空行)
在開發(fā)的時候,為了統(tǒng)計開發(fā)出的代碼總行數(shù)及文件總數(shù),在沒有使用工具的時候,總是要去一個文件一個文件的查找,文件夾層次少還行,層次多的時候就累死人了2011-01-01