作者kerash (K.T)
看板PHP
标题[请益] 如果避免或忽略检查 redeclare
时间Tue Apr 3 14:46:44 2012
在PHP中如果重复定义 function 或 class 的话
通常都会报 can't redeclare function() 的 error
我的状况是我有两个档案专门放置 function (a.php , b.php)
但是这两个档案被 include 的时机都不一样(主要有 get 跟 parse 资料)
就因为都要 get + parse 我自订的资料,
所以这两个档案里面分别都会有某些相同功能的 function
而目前突然需要一个得同时使用 a+b.php 的状况
当然同时 include 後就出现 redeclare 的警告了
最简单的方法当然是使用 function_exists 来查
但是这样函式一多或者在维护时就会很乱
目前想到的就是又再开一个档案来存放这些共用的 function
只是麻烦在 a 跟 b 是存放不同资料夹,所以在调用时怕会有路径问题
所以想问各位如果再遇到这种状况时(虽然不多)
有甚麽比较好的解决方法吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.34.30.6
1F:→ MOONRAKER:用class包 04/03 15:26
2F:→ kerash:由於我套用的函式好几十个了= =" 一时之间要转成class可能 04/03 16:14
3F:→ kerash:有点困难,再加上我还有写一些给其他人抓资料的api跟档案.. 04/03 16:15
4F:→ kerash:如果是单一些函式转成 CLASS 的话我会试试看 .. 04/03 16:15
5F:→ kerash:另外某些函式我有刻意用 include 跟 global var 04/03 16:16
6F:→ kerash:这部分使用上会有问题吗? 04/03 16:16
7F:→ MOONRAKER:不是单个函式转,是同一族的函式统统包进class。这样你 04/03 17:23
8F:→ MOONRAKER:起码可以用$a->convert()和$b->convert()这样来避过。 04/03 17:24
9F:→ MOONRAKER:但是你如果已经走到一半很难转那我就不知道了。 04/03 17:24
10F:→ kerash:恩= =" 因为不好转,当时为了方便全部都只写 function... 04/03 17:42
11F:→ kerash:因为还有包含一些全域变数,如果要塞进 class 不好塞 04/03 17:42
12F:推 tyf99:相同的 function,何不分到 c.php 去? 04/03 19:39
13F:→ kerash:这在我倒数第三段有提到,因为两个分的是不同的资料夹 04/03 19:40
14F:→ kerash: ^二 04/03 19:40
15F:→ kerash:有时候又是为了让其他主机抓资料有用 curl,路径问题很大 04/03 19:41
16F:→ kerash:为了抓路径我已经加一些判断式使用了(不知道为什麽相对路径 04/03 19:41
17F:→ kerash:在这台主机上我一直搞不定= =") 04/03 19:41
18F:→ tyf99:或是宣告 function 前都用 if(function_exists(func)) 检查 04/03 19:41
19F:→ tyf99:原来你自己都提过了...= = 04/03 19:43
20F:→ tyf99:你不是都已经知道解法了,是上来问偷懒的办法吗? 04/03 19:43
21F:→ tyf99:分出去c.php最省力,a.php和b.php里面再include(c.php) 04/03 19:47
22F:→ tyf99:也可以两个资料夹都放 symbolic link to c.php 04/03 19:47
23F:→ kerash:如果要偷懒的方法我就直接另外开一个档案把我要的丢进去 04/03 19:56
24F:→ kerash:再直接 include 该档案就好啦 ... 04/03 19:56
25F:→ kerash:我是要确认是不是有更好的方法或者我疏漏的地方 04/03 19:57
26F:→ kerash:因为这次遇到的只是临时性的新功能,不是主站用的,但是未 04/03 19:58
27F:→ kerash:来可能会透过这个方式继续存取一些资料给其他网站後台 04/03 19:58
28F:→ kerash:所以要确认以後不会出错 04/03 19:58