[英]Calling a method on array iteration, from an object - PHP
我想要做的是遍歷一個數組(在我的例子中是一個 MySql 結果),並輸出它,但同時也對數據做一些其他的事情。
使用過程方法執行此操作很容易 - 只需將其放入 foreach 循環中即可。
但是,我想知道是否有辦法將它集成到對象中。
因此,例如,我想將第一個字段放入會話中,我可以這樣做:
<?php
class MyClass {
public $myArray=array();
public function __construct() {
//..
//Mysql query as $stmt
//..
$this->myArray=$stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
$obj=new MyClass;
$i=0;
foreach($obj->myArray as $row) {
?>
<!-- Output HTML formatted data -->
<?
$_SESSION[$i]=$row['firstfield'];
$i++;
}
?>
但是,這會將任務從課堂上帶走。
我可以在類中放置一個 foreach 循環,如下所示:
<?php
class MyClass {
public $myArray=array();
public function __construct() {
//..
//Mysql query as $stmt
//..
$this->myArray=$stmt->fetchAll(PDO::FETCH_ASSOC);
$i=0;
foreach($this->myArray as $row) {
$_SESSION[$i]=$row['firstfield'];
$i++;
}
}
}
$obj=new MyClass;
foreach($obj->myArray as $row) {
?>
<!-- Output HTML formatted data -->
<?
}
?>
但是,現在我們在同一個數據集上有 2 個循環。 做同樣任務的時間加倍。
當數組被循環時,有沒有辦法創建一個方法來做某事? 有效地使數據集只需要循環一次......
編輯
另外,忘了提及,我無法在對象中構建 HTML 的原因是因為它將在具有不同 HTML 布局的不同頁面上使用。
這個怎么樣
<?php
class MyClass {
public $myArray=array();
public $htm = NULL;
public function __construct(&$format=NULL) {
//..
//Mysql query as $stmt
//..
$this->myArray=$stmt->fetchAll(PDO::FETCH_ASSOC);
$i=0;
foreach($this->myArray as $row) {
switch ($format) {
case 'Page1' :
$this->htm .= $this->format1($row);
break;
case 'Page2' :
$this->htm .= $this->format2($row);
break;
default:
$this->htm .= $this->format_default($row);
}
$_SESSION[$i]=$row['firstfield'];
$i++;
}
}
private function format1($row) {
return // formatted html
}
private function format2($row) {
return // formatted html
}
private function format_default($row) {
return // formatted html
}
}
$obj=new MyClass('Page1');
echo $obj->htm;
?>
或者,您可以根據需要的格式使用任意數量的子類對 MyClass 進行子類化。
class myBaseClass {
public $myArray=array();
public function __construct() {
//..
//Mysql query as $stmt
//..
$this->myArray=$stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
class format1Class extends myBaseClass
{
public $htm;
public function __construct() {
parent::_construct();
$i=0;
foreach($this->myArray as $row) {
$this->htm .= // format specific to this class
$_SESSION[$i]=$row['firstfield'];
$i++;
}
}
}
class format2Class extends myBaseClass
{
public $htm;
public function __construct() {
parent::_construct();
$i=0;
foreach($this->myArray as $row) {
$this->htm .= // format specific to this class
$_SESSION[$i]=$row['firstfield'];
$i++;
}
}
}
現在,根據您在任何腳本中需要的格式,您可以實例化所需的類。
$obj = new format2Class();
echo $obj->htm;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.