2016-05-31 7 views
3

私は、mysqli拡張を含むPHPスクリプトの例を探しています。問題のコードは次のとおりです。phpで関数をインスタンス化することは可能ですか?

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind"); 

これは関数またはクラスインスタンスであると混乱します。それが関数であれば、関数をインスタンス化することは可能ですか?

+4

それは、クラスのインスタンス –

+0

ある構造コールは、これらのパラメータが渡されていること(http://php.net/manual/en/mysqli.construct.php)[ここです]。 msgstr "MySQLサーバとの接続を表すオブジェクトを返します。" – sjagr

+0

関数を「インスタンス化」できたら、どういう意味でしょうか?どのような結果となり、このインスタンシエーションで何ができると思いますか? – CodeCaster

答えて

4

はコンストラクタです。

これは、インスタンスが作成された後に直ちに呼び出される、クラス内の特別なパブリック関数です。あなたのケースで

mysqliこのようなコンストラクタを持つクラス、次のとおりです。

public function __construct($server, $user, $password, $dbname) { 
// do something 
} 

参照:

http://php.net/manual/en/mysqli.construct.php

http://php.net/manual/en/language.oop5.decon.php

Geekfact:

あなたは何らかの形でクロージャを使って関数の "インスタンス"を得ることができます。これらは実際のインスタンスではありません。ちょうどcallablesです。

function createInstance() { 
    return function($a, $b) { 
     return $a + $b; 
    }; 
} 

$myIndependendFunction = createInstance(); 

echo $myIndependendFunction(3, 2); // prints 5 
+0

「new」という言葉を使用すると、インスタンスが得られます。その時点で、クラスの '__construct()'関数が呼び出されます( 'new MyClass($ parameter)'で使用されるパラメータで)。 mysqliの機能的な形式について心配しないでください。これは、単にmysql_ *からmysqli_ *へのマイグレーションをより簡単にするための、従来の理由によるものです。 mysqliのオブジェクトに固執する。 – DanFromGermany

+1

あなたが追加したリンクの両方で混乱が解消されたら、あなたはそれを釘付けにしました。クラスインスタンスにパラメータを渡すことが可能になりました。これは私を混乱させていた。 –

+1

私が捨てたのは、インスタンスにパラメータがあるという事実です。また、mysqli拡張が関数であることも読んでいます。だから、もうちょっと意味が分かります。したがって、インスタンスはパラメータを取ることができますか? –

-2

インスタント化ロジックを1か所にまとめたい場合は、関数内に現在のコードをラップして、すぐに使えるmysqliクラスを返すことができますか?

例:

<?php 

function getMysqliConnection(){ 
    return new mysqli("myServer", "myUser", "myPassword", "Northwind");  
} 

$conn = getMysqliConnection(); 
+0

*あなた、あなたはあなたです。 'あなたがあなたを包含したい場合は、インスタンス化のロジックです.'は意味をなさない。 – Styphon

+0

ありがとうstyphon .. – JParkinson1991

0

あなたは機能を宣言それを使用するには、あなたはオブジェクトを宣言(この場合はmysqliのオブジェクト)、あなたはそれをインスタンス

マニュアルを読むことができます。あなたを混乱させる何 http://www.php.net/manual/en/language.oop5.basic.php

関連する問題