ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    CodeIgniterのライブラリの引数は配列にする

    このエントリーを含むはてなブックマーク はてなブックマーク - CodeIgniterのライブラリの引数は配列にする あとで読む
    PHPのフレームワークである「CodeIgniter」を使って、Webアプリをリファクタリングした。
    CodeIgniterで、ライブラリのクラスを自作して使うとき、コンストラクタに渡す引数は配列にしなければならない。

    ライブラリの作成 : CodeIgniter ユーザガイド 日本語版 Version 1.7.3

    クラス初期化時のパラメータの引き渡し

    ライブラリの読み込みメソッドで、第2引数を経由して動的に配列でデータを渡すことができます。
    データはクラスのコンストラクタに渡されます:

    $params = array('type' => 'large', 'color' => 'red');
    $this->load->library('Someclass', $params);

    この機能を使うとき、クラスのコンストラクタでデータを受け取れるようにしておかなければなりません:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Someclass {
     function Someclass($params)
     {
      // $paramsを使って何かを行う
     }
    }
    ?>



    コンストラクタ側で、受け取った配列 $params から、各要素=初期値を取り出す記述が必要と。
    =PHPのWebアプリをCodeIgniterに移植するとき、クラスの引数に注意!

    ・PHPの言語仕様には、Java等のようなオーバーロード機能がない。
    ・クラスの引数を配列1個にしておけば、引数のシグネチャーの違いを気にしないで渡せる。
    ・コンストラクタの中で、配列を展開して、必要な引数を取り出せばOK。

    シグネチャ - Wikipedia

    プログラミングで、メソッドや関数の、名前・戻り値や引数の型などの組み合わせ。



    CodeIgniterのソースコードを読んでみると、ライブラリクラスをロードする仕組みは、
    CodeIgniter/system/libraries/Loader.php
    に書いてあった。
    CI_Loaderクラスのlibrary()メソッドで、引数の型チェックをしており、配列じゃない場合は強制的にNULL(空)にしてる。

    CodeIgniterで、ライブラリクラスの引数が配列1個になっているのは、多分そういうことだろうと予想してみた。
    CodeIgniterのライブラリに移植するクラスは、全部引数部分を書き換えなきゃいけない。
    大変だ~。

    CodeIgniter徹底入門CodeIgniter徹底入門
    河合 勝彦 鈴木 憲治 安藤 建一

    翔泳社 2008-06-10
    売り上げランキング : 64698

    Amazonで詳しく見る
    by G-Tools

    関連記事

    コメント

    コメントの投稿


    管理者にだけ表示を許可する

    トラックバック

    トラックバックURL:
    http://hamamuratakuo.blog61.fc2.com/tb.php/588-b1c60949

    FC2Ad