1
美好的一天,PHP array_walk()類中有多個參數
我得到了以下問題。 在我想要調用的類中有一個方法array_walk有兩個參數。
array_walk($fields, array($this, 'SetAlias'), $Table);
當我把評論的方法SetAlias()它不響應。因此它被稱爲。
被調用的方法是:
private function SetAlias($value, $table){
if(isset($this->alias[$table][$value]) === true){
$value = $value.'` AS `'.$this->alias[$table][$value];
}
return($value);
}
參數
但是當我打印的功能,參數,返回:
Array
(
[0] => parking_id
[1] => 0
[2] => parking
)
不幸的是,這是不是爲我工作。
,所以我可以改變方法的參數:
private function SetAlias($value, $null, $table){
依然沒有結果。
代碼:
<?php
class Test {
public $fields = array('parking' => array('parking_id', 'parking_country', 'parking_name'));
public $alias = array();
private function SetAlias($value, $table){
if(isset($this->alias[$table][$value]) === true){
$value = $value.'` AS `'.$this->alias[$table][$value];
}
return($value);
}
public function GetFields($Table){
$fields = $this->fields[$Table];
if(isset($this->alias[$Table]) === true){
array_walk($fields, array($this, 'SetAlias'), $Table);
}
return('`'.implode($fields, '`, `').'`');
}
}
$example = new Test();
$example->alias['parking'] = array('parking_id'=>'id', 'parking_country'=>'country');
echo $example->GetFields('parking');
?>
目前,它返回:
parking_id
,parking_country
,parking_name
我缺少什麼?
作品通過VolkerK
public function GetFields($table){
$fields = $this->fields[$table];
if(isset($this->alias[$table]) === true) {
$fn = function($e) use ($table) {
return $this->SetAlias($e, $table);
};
$fn = $fn->BindTo($this);
$fields = array_map($fn, $fields);
}
return('`'.implode($fields, '`, `').'`');
}
並不是在靜態情況下的工作,雖然。是否有可能使這個 工作?
$fn = $fn->BindTo(__CLASS__); $SetFields = array_map($fn, $SetFields);
- 警告:封閉:: bindTo()預計參數1爲對象,給定的字符串
靜態上下文
<?php
class Test {
public static $fields = array('parking' => array('parking_id', 'parking_country', 'parking_name'));
public static $alias = array();
private static function SetAlias($value, $table){
if(isset(self::$alias[$table][$value]) === true){
$value = $value.'` AS `'.self::$alias[$table][$value];
}
return($value);
}
public static function GetFields($table){
$fields = self::$fields[$table];
if(isset(self::$alias[$table]) === true) {
$fn = function($e) use ($table) {
return self::SetAlias($e, $table);
};
$fn = $fn->BindTo(__CLASS__);
$fields = array_map($fn, $fields);
}
return('`'.implode($fields, '`, `').'`');
}
}
Test::$alias['parking'] = array('parking_id'=>'id', 'parking_country'=>'country');
echo Test::GetFields('parking');
?>
WORKS VolkerK:
<?php class Test { public static $fields = array('parking' => array('parking_id', 'parking_country', 'parking_name')); public static $alias = array(); private static function SetAlias($value, $table){ if(isset($table[$value]) === true){ $value = $value.'` AS `'.$table[$value]; } return($value); } protected static function getFieldMapper($table) { if(!isset(self::$alias[$table])) { return function($e) { return $e; }; } $table = self::$alias[$table]; return function($e) use ($table) { return Test::SetAlias($e, $table); }; } public static function GetFields($table){ $fields = array_map(self::getFieldMapper($table), self::$fields[$table]); return('`'.implode($fields, '`, `').'`'); } } ?>
謝謝..這工作。現在,如果我想在靜態環境中使用它,則會有很大的不同。 (我沒有想到) –
你可以請改變或更好:添加類定義與靜態修飾符在你的問題文本? – VolkerK
完成。添加了上面的靜態示例。 –