0

無関係なクラスが内部に定義されているモデルがありました。
私はプロトタイピングをしていて、それを適切に作成するために時間を費やしていませんでした。プロトタイプがエンドユーザーに受け入れられたので、もう一度調べて、コードを適切に再編成したいと思います。クラスは次のようになります。

   <?php

        class myclassABC 
        {

           private $_hostname;
           private $_password;
           private $_username;
           private $_connection;
           private $_data;
           private $_timeout;
           private $_prompt;

           public function __construct($hostname, $password, $username = "", $timeout = 10) 
           {

             $this->_hostname = $hostname;
             $this->_password = $password;
             $this->_username = $username;
             $this->_timeout = $timeout;
            } // __construct


           public function connect() 
           {
           } 

           public function dosomethingelse() 
           {
           } 

        }//end class

このすべてのコードを別のファイルに移動しました。このファイルはライブラリフォルダーにあります。しかし、モデル内のオブジェクトを適切にインスタンス化する方法を理解するのに問題があります。私は試した:

        //pass all the data we need as an array of parameters.
        $params = array('_hostname' => '$ip', '_password' => 'password', '_username' => '');
        $hp = $this->load->library($classname,$params ); 
        $hp->connect();
        $data= $hp->dosomethingelse();
        $hp->close();

適切なクラスを読み込んでいますが、次のエラーメッセージが表示されます。

重大度:警告

メッセージ:HP5406_ssh :: __construct()の引数2がありません。これは、1095行の/var/www/m.racktables/system/core/Loader.phpで呼び出され、定義されています。

ファイル名:libraries / HP5406_ssh.php

行番号:22

引数2はパスワードです。
申し訳ありませんが、codeigniterでライブラリを使用するのはこれが初めてです。
あなたがいくつかの提案を提供することができれば、それはありがたいです。

4

2 に答える 2

1

問題は、コンストラクターが配列を予期していなかったことです。ライブラリセクションのcodeigniterマニュアルの例に基づいて、これを渡します。コンストラクターを変更して配列を受け入れるようにしたところ、動作するようになりました。別の質問を投稿して、個々のパラメーターを渡す方法を確認します。

于 2012-08-30T20:40:57.787 に答える
0

これを行う代わりに:

$hp = $this->load->library($classname,$params ); //switch model name must be capitalized.
$hp->connect();
$data= $hp->dosomethingelse();
$hp->close();

これを行う:

$this->load->library($classname, $params);
$classname = strtolower($classname); // get the classname to lowercase for CI
$this->$classname->connect();
$data = $this->$classname->dosomethingelse();
$this->$classname->close();

CodeIgniterは、ライブラリクラスインスタンスをにロードします$this。奇妙なことですが、CIの他の部分の動作と一致しています。このメソッドが気に入らない場合は、いつでもinclude()またはrequire()クラスを使用して、「通常の」方法で使用できます。

ライブラリの作成に関するドキュメントを参照してください。

関連する部分は次のとおりです。

コントローラー関数内から、標準を使用してクラスを初期化できます。 $this->load->library('someclass');

ここで、someclassは、「。php」ファイル拡張子のないファイル名です。ファイル名は大文字または小文字で送信できます。CodeIgniterは気にしません。

ロードされると、小文字バージョン を使用してクラスにアクセスできます。$this->someclass->some_function(); // Object instances will always be lower case

于 2012-08-30T19:54:25.610 に答える