2013-04-18 102 views
0

我只想declare函數沒有的實現。這些實現必須位於另一個文件中。如何在PHP中聲明函數?

這是可能的,如果是這樣,那裏有一些棘手的問題嗎? 這是否是常見做法?我很好奇,因爲我來自C++。

實施例:

----------------- declarations.php -----------

<?php 
function first($name, $age); 
function second($country); 
?> 

- --------------- implements.php -----------

<?php 
include (declarations.php); 

function first($name, $age) 
{ 
// here is the implementation 
} 

function second($country) 
{ 
// here is the other implementation 
} 
?> 
+0

改爲使用'required_once',而且你所做的方式是正確的,但可能不是最佳的。 –

+0

你已經聲明瞭一個函數後就不能重新聲明它,所以沒有辦法做到以上不行。如下所述,儘管交換到OO可能會達到相同的結果。有沒有php equivilent的.h :( – Dave

回答

5

我想你想要的是一個接口,雖然它必須實現在一個班級。

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

由於PHP是一種腳本語言,你仍然必須有一個直接引用與include實施。沒有像C++這樣的鏈接階段。

+0

謝謝,我要試試接口 –

1

不,PHP沒有相當於頭文件的地方,你聲明瞭一個全局函數並在某處執行它。正如丹尼爾所寫,有類似的東西,即接口,但其目的是描述所有實現類必須遵守的接口,而不是指示「函數佔位符」。

此外,從版本5.4開始,PHP不支持函數或方法重載,因此即使使用不同的參數,同一函數或方法也不能多次聲明。

1

你可以使用面向對象的編程來解決這個問題嗎?具有幾種抽象方法的抽象類會做得很好。

// File: MyClass.php 
abstract class AbstractClass { 

    abstract public function first($arg); 
    abstract public function second($arg, $arg2); 

} 

// File: core.php 
require_once('MyClass.php'); 

class MyClass extends AbstractClass { 

    public function first($arg) { 
     // implementation goes here 
    } 

    public function second($arg, $arg2) { 
     // implementation goes here 
    } 
} 
+0

你不一定需要一個抽象類,一個接口只能用於標題。 –

1

PHP和C++與這一點不同。 無需做出聲明並單獨實現您的功能。 您必須同時執行此操作(在同一文件中聲明和實現),然後在腳本中包含(include()或require_once())函數。