2015-08-23 46 views
1

我在學習面向對象的PHP,我想知道是否允許在方法內使用過程函數。是否允許在OOP PHP方法中使用過程函數?

例如在WordPress中,您可以使用功能get_option();從選項數據庫表中按名稱獲取值。它是不允許做這樣的事情:

class ExampleClass { 

    public static function ExampleMethod($optionName) { 
     if(get_option($optionName)) { 
     return get_option($optionName) + 20; 
     }  
    } 

} 
+4

舉一個簡單的例子:*你將如何得到一個字符串的長度,當你將不會被允許在類中使用像'strlen()'這樣的函數?*所以是的,它可以工作,是的,它是允許的,是的,它也被使用。 – Rizier123

+1

這是我的想法,但我需要確認。感謝你的回答! – Robbert

+1

不客氣:)此處只是爲了說明這一點:如果您使用命名空間,則必須注意:'namespace I_AM_A_NAMESPACE; \t function strlen(){echo「nope」; } echo strlen(「xyz」); echo \ strlen(「xyz」);'第一個函數調用將打印「nope」,第二個「3」 – Rizier123

回答

0

是否允許使用內部OOP PHP方法程序的功能呢?

那麼第一個問題就是它甚至是可能的。而我們爲什麼不嘗試一下:

class A { 

    public static function randomStaticMethod() { 
     echo "Function call:" . phpversion(); 
    } 

    public function randomMethod() { 
     echo "Function call:" . phpversion(); 
    } 

} 

$o = new A(); 
$o->randomMethod(); 

A::randomStaticMethod(); 

你會看到如預期它會工作,沒有錯誤沒有警告,只是:

Function call: ... 
Function call: ... 

所以這是絕對有可能。現在你的問題:是否允許?

簡單的問題,這應該回答你的問題:

如何,你會得到一個字符串,當你將不會被允許在一個類中使用像strlen()功能的長度?

所以是的,這也是絕對允許和使用。


現在還有其他一些東西,這些東西可能對您有所幫助。如果你使用命名空間,你必須小心。

作爲例子:

namespace I_AM_A_NAMESPACE; 

function strlen() { 
    echo "nope"; 
} 

echo strlen("xyz"); 
echo \strlen("xyz"); 

你的輸出將是:

nope 
3 

所以,如果你使用命名空間的工作,你必須知道在哪個命名空間中是和功能,您想打電話。因此,如果您想調用全球功能strlen()並且想要採用保存路線,請始終在其前面放置一個\,以確保您呼叫全球strlen()功能。

0

你可以完全靜態使用下面的代碼。我只是使用數字1作爲參數,而我使用Return 1作爲示例代碼,因此可以返回一些內容。我個人建議動態,特別是如果你的系統內存有限分配對象,但這裏是我的代碼:

<?php 
echo ExampleClass::ExampleMethod(1); 
exit(); 

class ExampleClass { 

public static function get_option($optionName) { 
    //do processing here 
return 1; 
} 

public static function ExampleMethod($optionName) { 
if(ExampleClass::get_option($optionName)) { 
    return ExampleClass::get_option($optionName) + 20; 
} 
} 

} 
?> 
相關問題