0

わかりましたので、ユーザーからIDを取得しようとしています。入力すると$getid = '1'すべてが機能します

require_once "../maincore.php";

$getid = '1';
class UploadHandler
{   
    protected $options;
    // ...

    function __construct($options=null, $getid = '1') {

        $this->options = array( 
            'script_url' => 'myfile/'.$getid.'/',

  // ...

like と入力するか、likeと set$getid = $userdata['user_id'] のようなクラスに何かを入れて も、何も機能しません。私は長い間、多くのスタッフとケースを試してきました。赤のチュートリアルとプライベート関数とは何かなど$myid = $userdata['user_id'];$getid = $myid

$myid = $userdata['user_id'];privateと varも試しました$myid = $userdata['user_id'];

$userdata['user_id']だから私はそれを機能させることができないデータを取得したいだけです。

4

2 に答える 2

0

グローバル変数をメソッド パラメータのデフォルト値として割り当てようとしているように見えます...これは実行できません。これには多くの理由がありますが、現時点で最も重要なのは、これが OOP の主な考え方と矛盾していることです: OOP のポイントは、他に何が起こっているかに関係なく、コードを複数回書く必要がないということです:

class My_DB_Object
{
    private $_connection = null;
    public function __construct($dbType = 'mysql', array $loginParams = array())
    {
        switch(strtolower($dbType))
        {
            case 'mysql':
                return $this->constructMySQL($loginParams);
            case 'pgsql':
                return $this->constructPGSql($loginParams);
            case 'mssql':
                return $this->constructMSSQL($loginParams);
            default:
                throw new InvalidArgumentException($dbType.' is not supported, yet?');
        }
    }
    private function constructMySQL(array $loginParams)
    {
        //and so on...
    }
}

このオブジェクトは、使用するデータベースに関係なく、すべてのプロジェクトで使用できselectます。メソッドが定義されている可能性があり、さまざまな DB をクエリするさまざまな方法を処理します。同じクエリの時間を書き直す必要はありません。もう一度...

デフォルト値として割り当てようとしている変数が設定される、またはスコープ内にあるという保証はありません。完全に異なる名前空間にある別のオブジェクトのメンバー関数内に新しいインスタンスを作成することもできます。 .

基本的に: デフォルト値はハードコーディングされています。
ファイルには、出力を生成するクラス定義またはコードのいずれかが含まれています。スニペットは両方を実行しているようです。

コードは次のようになります。

require_once('UploadHandler.php');//or look into __autload()
$uploadInstance = new UploadHandler(null, $userdata['user_id']);

ファイルUploadHandler.phpは次のようになります。

<?php
class UploadHandler
{
    protected $options = null;
    public function __construct (array $options = array(), $getid = '1')
    {//assuming $options should be an array
        $this->options = $options;
        $this->options['script_url'] = 'myfile/'.$getid.'/';
    }
}
//no closing ?> tag!
于 2012-12-26T14:04:43.877 に答える
0

データをクラスに渡すか、データを注入する必要があります (別のトピック):

クラスを構築するとき、値が何であるかをクラスに伝えます。

//some place in your code
$userdata = array(...some data from somewhere ...);
//$options is optional but at the beginning of the args so the 'null' is required
$class = new UploadHandler(null, $userdata['user_id']);

オプションの引数を関数の引数の最後に置くと便利なことがよくあります。

class UploadHandler
{   
    protected $options;
    // ...

    // Required params first then optional params
    function __construct($getid ,$options=null) {

        $this->options = array( 
            'script_url' => 'myfile/'.$getid.'/',

次に、クラスを構築します。

//some place in your code
$userdata = array(...some data from somewhere ...);
//$options is now optional and at the end so the default value will be 'null'
$class = new UploadHandler($userdata['user_id']);
于 2012-12-26T14:06:57.163 に答える