「PHP」の編集履歴(バックアップ)一覧はこちら

PHP - (2008/05/21 (水) 12:49:16) の最新版との変更点

追加された行は緑色になります。

削除された行は赤色になります。

**Tips *** ユーザ関数の引数を参照渡しで呼び出す call_user_func では引数を参照渡しできない。~ なので、call_user_func_arrayの第二引数へ参照を含む配列を渡す。~ #codehighlight(PHP){{ function bbb(&$str) { $str = 'bbb'; } $str = 'aaa'; call_user_func('bbb', $str); echo $str; // aaa : call_user_funcは参照を引数に取れない call_user_func_array('bbb', array($str)); echo $str; // aaa : 参照の配列を渡していない call_user_func_array('bbb', array(&$str)); echo $str; // bbb : OK }} ---- *** 連想配列と配列を区別する #codehighlight(PHP){{ function is_assoc($array) { return array_keys($array) !== range(0, count($array)-1); } }} ---- *** マルチバイト対応 json_encode #codehighlight(PHP){{ function mb_json_encode($value) { if(is_array($value)) { if(is_assoc($value)) { $ret = array(); foreach($value as $k=>$v) { $ret[] = mb_json_encode($k).':'.mb_json_encode($v); } $ret = '{'.implode(',', $ret).'}'; } else { $ret = array(); foreach($value as $v) { $ret[] = mb_json_encode($v); } $ret = '['.implode(',', $ret).']'; } } else if(is_object($value)) { $ret = mb_json_encode(get_object_vars($value)); } else if(is_string($value)) { $ret = '"'.str_replace('"', '\\"', $value).'"'; } else { $ret = json_encode($value); } return $ret; } }}
#contents ---- **Tips *** ユーザー関数の引数を参照渡しで呼び出す call_user_func では引数を参照渡しできない。~ なので、call_user_func_arrayの第二引数へ参照を含む配列を渡す。~ #codehighlight(PHP){{ function bbb(&$str) { $str = 'bbb'; } $str = 'aaa'; call_user_func('bbb', $str); echo $str; // aaa : call_user_funcは参照を引数に取れない call_user_func_array('bbb', array($str)); echo $str; // aaa : 参照の配列を渡していない call_user_func_array('bbb', array(&$str)); echo $str; // bbb : OK }} ---- *** ユーザー関数の引数を連想配列で呼び出す PHP5以上 #codehighlight(PHP){{ function call_user_func_assoc($func, $array) { $reflect = NULL; if(is_array($func)){ $reflect = new ReflectionMethod($func[0], $func[1]); $func_name = (is_object($func[0]) ? get_class($func[0]) : $func[0]).'::'.$func[1]; } else { $reflect = new ReflectionFunction($func); $func_name = $func; } $args = array(); foreach ($reflect->getParameters() as $i => $param){ $pname = $param->getName(); if(isset($array[$pname]) || array_key_exists($pname, $array)){ $args[$i] = $array[$pname]; } else if ($param->isDefaultValueAvailable()){ $args[$i] = $param->getDefaultValue(); } else{ trigger_error("call to {$func_name} missing parameter nr. ", $i+1, E_USER_ERROR); $args[$i] = null; } } return call_user_func_array($func, $args); } }} ---- *** 連想配列と配列を区別する #codehighlight(PHP){{ function is_assoc($array) { return array_keys($array) !== range(0, count($array)-1); } }} ---- *** マルチバイト対応 json_encode json_encodeはUTF-8のみ対応。~ その場合、マルチバイト文字列はu~に変換される。 #codehighlight(PHP){{ function mb_json_encode($value) { $ret = null; if(is_array($value)) { if(is_assoc($value)) { $ret = array(); foreach($value as $k=>$v) { $ret[] = mb_json_encode($k).':'.mb_json_encode($v); } $ret = '{'.implode(',', $ret).'}'; } else { $ret = array(); foreach($value as $v) { $ret[] = mb_json_encode($v); } $ret = '['.implode(',', $ret).']'; } } else if(is_object($value)) { $ret = mb_json_encode(get_object_vars($value)); } else if(is_string($value)) { $ret = '"'.str_replace('"', '\\"', $value).'"'; } else { $ret = json_encode($value); } return $ret; } }} ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー