2016-05-31 138 views
3

我正在尋找一個包含mysqli擴展的PHP腳本示例。代碼有問題如下:是否有可能在php中實例化一個函數?

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

我很困惑,因爲這是一個函數或類實例。如果它是一個函數,是否有可能實例化一個函數?

+4

它是一個類的實例 –

+0

[這裏的](http://php.net/manual/en/mysqli.construct.php)構建呼叫,這些參數被傳遞到。 「返回一個表示與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

如果你想在一個地方包含你的實例化邏輯,你可以將你當前的代碼包裝在一個函數中,並返回準備使用mysqli類?

例子:

<?php 

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

$conn = getMysqliConnection(); 
+0

*你,你=你是。 '如果你想包含你是實例化邏輯'沒有任何意義。 – Styphon

+0

感謝styphon .. – JParkinson1991

相關問題