php 参数 只用一次,php中,用函数,如果有很多个参数,只使用最后一个参数,有什么优雅的写法?...
比如有一個function()
function find($conditions = null, $sort = null,..(很多參數).., $fields = null, $limit = null)
現在我只要使用第一個和最后一個參數,一般都是
find('xxx','','','',...,'xxx')
很不好看,有沒有什么優雅一點的寫法呢?
回復內容:
比如有一個function()
function find($conditions = null, $sort = null,..(很多參數).., $fields = null, $limit = null)
現在我只要使用第一個和最后一個參數,一般都是
find('xxx','','','',...,'xxx')
很不好看,有沒有什么優雅一點的寫法呢?
分兩種情況討論這個問題。
如果你是想固定其中某幾個值
如果你是想讓其中某些參數有默認值
情況一:如果你是想提前固定其中某幾個參數的值
你可以對函數進行部分求值(柯里化),得到一個新的函數,后續使用的時候,使用新函數去操作。
而在柯里化的時候,可以自定義其中某些參數的值。
例如
// 原始的函數
function find($conditions = null, $sort = null,..(很多參數).., $fields = null, $limit = null)
// 柯里化后的函數
function curryFind($conditions, $limit) {
return find($conditions, "sort", ..., "fields", $limit);
}
情況二:如果你是想讓其中某些參數有默認值
可以講可選參數合并為一個數組。參數以數組形式傳入,與默認參數數組進行合并。
例如
function find($options) {
$defaultOptions = array(
'conditions' => 'c',
'sort' => 's',
...
'fields' => 'f',
'limit' => 'l'
);
$options = array_merge($defaultOptions, $options);
// do something.
}
這兩種情況并沒有很明顯的區別,只是處理多個參數的方法而已。根據你自己的需求來使用。
參考資料
http://stackoverflow.com/questions/1609985/is-it-possible-to-curry-method-calls-in-php
柯里化:http://en.wikipedia.org/wiki/Currying
如果一個函數一堆參數,本身就說明這個函數的設計有問題,盡早考慮重構吧。
如果實在沒辦法,可以考慮使用 call_user_func_array() 函數,構造一個數組傳進去就可以了。
帶一個 array 進去 ...
function find( array(
'conditions' => '1',
'sort' => '2',
// ....
'limit' => '3'
) );
沒有就不寫 ...
你把這個方法的最后一個參數拿到第二個參數的地方不就可以了。
function find($conditions = null, $limit = null,$sort = null,..(很多參數).., $fields = null)
function abc($str) {
parse_str($str,$arr);
$arr['key'];
}
$some = abc('key=1&p=2&some......');
// 使用 非固定函數
static function fun(){
$numargs = funcnumargs();//獲取參數個數;
$arglist = funcget_args();//獲取參數列表
}
//函數自己設計吧,s設計一個函數 把它帶入到老函數就好
funcgetargs 和 funcgetnums 函數
怎么下劃線沒了?
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:php中文網
總結
以上是生活随笔為你收集整理的php 参数 只用一次,php中,用函数,如果有很多个参数,只使用最后一个参数,有什么优雅的写法?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch梯度下降函数_Pytorc
- 下一篇: 深入理解Linux内存映射机制