Ajaxを使う際、PHP側からJSON形式の値を出力したいことは良くあると思います(入力はだいたいPOSTで事足りますね)。
PHPでJSON形式の値を出力したい場合、いちばん簡単なのはjson_encode()です。
//本来はheaderなども正しく処理した方が良いが省略
$list = array('apple', 'orange', 'banana');
echo json_encode($list);
ただし、json_encode()はPHP 5.2.0以上の関数なので、それ未満の環境だとundefined functionでエラーになります。
http://php.net/manual/en/function.json-encode.php
リリース後にPHPのバージョン違いに気がついた可哀想な人には、Zend_Jsonがおすすめです。
まずはZend FrameworkのページからZend Frameworkをダウンロードします(minimalでOK)。
そして、回答したフォルダのZend/Json.phpと、Zend/Jsonフォルダをinclude_pathが通ったフォルダにコピーします。
あとは、コード内で
require_once 'Zend/Json.php';
$list = array('apple', 'orange', 'banana');
echo Zend_Json::encode($list);
とやるだけ。
関数の名前が変わるだけで、同じ使い勝手が実現できていますね。これなら一括置換も簡単。
Zend Frameworkを使い始めました。
いちいちファイルをrequire_onceするのは面倒なので、Autoloaderを使います。
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
また、Zend_Db_Tableのfindがrowsetを返すのが気にくわないため、findOne()を実装することにします。
class App_Db_Table extends Zend_Db_Table_Abstract
{
public function findOne()
{
$args = func_get_args();
$result = call_user_func_array(array($this, 'parent::find'), $args);
return $result->current();
}
}
parentのfindを呼ぶとき、
call_user_func_array(array(’parent’, ‘find’), $args);
とすると、E_STRICTなPHP5では、staticでない関数をstaticに呼び出したと言われてエラーになります。
なので、このように
call_user_func_array(array($this, ‘parent::find’), $args);
と呼び出すわけですが、
Zend_Loaderがあまり賢くないので、parent:: を見てparent.phpを探しに行ってしまいます。
Warning: include(parent.php) [function.include]: failed to open stream: No such file or directory in …
Zendのフォーラムでも同じ症状の人がいましたが、これという解決案は見つからないみたいなので、
Zend/Loader.php:83行目
include $file
を
@include $file
に変えてめでたしめでたし。
なんだかなぁ。