0

比較的「重い」PHP ページを表示しています。DB への接続を使用していくつかの行を取得する関数がいくつかあります。各関数で新しい $con を作成すると処理が大幅に遅くなることに気付いたので、当然ページの各関数に同じ $con を使用したいと思います。私はこれを試しました:

$con = mysqli_connect("localhost","root","root", "mydb");

function fA($a, $b, &$con = $con)
{}

function fB($a, &$con = $con)
{}

関数ごとに $con へのポインターを渡そうとしていることがわかりますが、それぞれの関数を取得しsyntax error, unexpected $conています。(関数を呼び出すたびに $con を関数に渡すこともできますが、このようにすると、すべての関数呼び出しに戻って変更する必要がなくなり、見栄えが良くなります)

4

2 に答える 2

1

以下を使用できます。

global $con;

各関数の本体の先頭で、次のようにします。

function fA($a, $b) {
    global $con
    // ...etc...
}

しかし、これは一般的に悪い習慣と見なされています。

より良いアプローチは、依存性注入を使用して、ロジックが与えられたストレージ デバイスの種類に依存しないようにすることです。これらの行に沿ったもの:

class LogicExecutor {
    private $con;

    public __construct($con) {
        $this->con = $con;
    }

    public function doTaskOne($a, $b) {
        // you can use $this->con in this scope
    }
}

$con = mysqli_connect('localhost', 'root', 'root', 'mydb');
$le = new LogicExecutor($con);

$le->doTaskOne('a','b');

しかし、それでもコードはmysqli非常に緊密に結合されます。ORMを検討したことがありますか?

于 2013-11-09T20:36:19.537 に答える
0

グローバル $con を使用しても問題ありません。最善の解決策は、クラスに入れることです。

元のコンセプトに固執する場合は、すべての関数呼び出しで $con を渡す必要があります。

$con = mysqli_connect("localhost","root","root","mydb");
fA("abraca","dabra",$con);
fB("hocus-pocus",$con);

function fA($a, $b, &$con)
{}

function fB($a, &$con)
{}

最初のパラメータとして $con を使用する方が良いかもしれません。

于 2013-11-09T21:08:31.047 に答える