Дублирующая функция - PullRequest
       2

Дублирующая функция

2 голосов
/ 22 июля 2011

Во-первых, я сделал свой поиск об этом.Но я не мог найти никакого решения для этого.Вот что я хочу сделать.У меня есть несколько файлов с одним и тем же именем функции, во время теста я не указал эту функцию и оставил ее простой.

Будут включены несколько файлов, но так как функция уже была объявлена, я получаючто фатальная ошибка не может переопределить функцию ..., ранее объявленная в ...

Я знаю, как избежать этой фатальной ошибки, но поскольку я включаю несколько файлов с одной и той же функцией, она неисправить это.

Мой вопрос, это логично, или я должен переосмыслить и сделать что-то другое?

Мой друг сказал мне, что можно обрабатывать объекты и т. д.

спасибо за любое предложение.

Ответы [ 4 ]

4 голосов
/ 22 июля 2011

Функции идентичны? В этом случае вы можете обойти проблему, обернув объявления функций с помощью предложения function_exists(), см. Как избежать фатальной ошибки Невозможно переопределить функцию в PHP :

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

Либо, возможно, стоит потратить время на чтение пространств имен :

В мире PHP пространства имен предназначены для решения двух проблем, которые авторы библиотек и приложений сталкиваются при создании повторно используемые элементы кода, такие как классы или функции:

  1. Конфликты имен между создаваемым кодом и внутренним PHP классы / функции / константы или сторонние классы / функции / константы.
  2. Возможность создания псевдонима (или сокращения) Extra_Long_Names, предназначенного для Облегчить первую проблему, улучшая читабельность исходного кода. ( источник * * одна тысяча двадцать-одна)
2 голосов
/ 22 июля 2011

Если ваши функции имеют одинаковое имя, они должны делать то же самое. Если они этого не делают, вы должны переименовать их, чтобы отразить, что они делают. Таким образом, вы можете включить все свои функции один раз (в начале вашего скрипта) и использовать их везде, где вам нужно.

Я бы не рекомендовал использовать объекты исключительно как средство решения этой проблемы (хотя я бы рекомендовал использовать их для множества других причин).

Так что ответить на часть вашего вопроса

Мой вопрос, это логично, или я должен переосмыслить и сделать что-то другое?

Да, вы должны сделать что-то другое, даже если это означает, что пространство имен ваших функций (например, укажите проблемную область с подчеркиванием)

function user_rename(){

}

function category_rename(){

}

function group_rename(){

}
0 голосов
/ 22 июля 2011

Я думаю, что вы сказали это "... или я должен переосмыслить и сделать что-то другое."

Это не обязательно должен быть объект.Но почему бы не передать на аутсорсинг все общие функции в одном файле (например, common.php) и включить его из всех других файлов с помощью require_once 'common.php'?

0 голосов
/ 22 июля 2011
// 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();
...