2011-07-22 151 views
2

首先,我對此做了我的研究。但我找不到任何解決方案。 在這裏,我想要做的。 我有多個文件具有相同的函數名稱,在我的測試過程中,我沒有指定該函數並保持簡單。重複功能

的多張文件將被包括在內,但因爲該函數已經聲明,我收到致命錯誤不能重新聲明功能......,先前宣佈...

我知道如何避免那個致命的錯誤,但由於我包含了多個具有相同功能的文件,所以無法修復它。

我的問題,這是否合乎邏輯,還是我應該重新考慮並做一些不同的事情。

我的朋友告訴我可以用物件等來處理。

感謝您的任何建議。

回答

4

功能是否相同?在這種情況下,你可能能夠通過包裝用function_exists()子句函數聲明「黑客」解決該問題,請How to avoid fatal error Cannot redeclare function in PHP

<?php 
if (!function_exists('utility')) { 
    function utility() { 
    // ... 
    } 
} 
?> 

或者,它可能是值得你花時間閱讀了關於namespaces

在PHP世界,命名空間被設計爲解決兩個問題,圖書館的 作者和應用程序創建 可重複使用的代碼元素如類或功能時遇到的問題:創建代碼,以及內部PHP 類/函數/常量或第三方 類/函數/常量之間

  1. 名稱衝突。
  2. 將別名(或縮短)設計爲 的Extra_Long_Names的能力緩解了第一個問題,提高了源代碼的可讀性。 (source
+1

如果功能相同,您可以更好地將功能提取到它自己的文件中幷包含該功能。 – Ikke

+0

@Ikke那會更好,是的。 – jensgram

2

如果你的函數具有相同的名字,那麼他們應該做同樣的事情。如果他們不這樣做,那麼你應該重新命名他們以反映他們的工作。這樣,您可以將所有功能包括在一次(在腳本開始時),並在必要時使用它們。

我不會建議僅將對象用作解決此問題的方法(儘管我會建議將它們用於許多其他原因)。

因此,要回答你的問題的一部分

我的問題,是合乎邏輯的,或者我應該重新思考和做些事情不同勢。

是你應該做不同的事情,即使這意味着命名空間的功能(把關注隨後例如下劃線的區域)

function user_rename(){ 

} 

function category_rename(){ 

} 

function group_rename(){ 

} 
+0

好點。 (15個字符) – jensgram

0
// A.php 
Class A { 

static function myFunc(){ 
................. 
} 

} 
// B.php 
Class B { 

static function myFunc(){ 
................. 
} 

} 
// C.php 
Class C { 

static function myFunc(){ 
................. 
} 

} 

// foo.php 
include_once('A.php'); 
include_once('B.php'); 
include_once('C.php'); 
A::myFunc(); 
B::myFunc(); 
C::myFunc(); 
0

我覺得你說的。」 ..或者我應該重新思考,並做一些不同的事情。「

它不一定是一個對象。但爲什麼不將所有常見功能外包在一個文件中(即common.php),並將其從require_once 'common.php'的所有其他文件中包含?