PHP 类成员方法多次调用另一个成员方法,该成员方法会调用内部方法,但是会重复定义的错误

2018-08-18 22:31:38 +08:00
 konakona

PHP7.1.5。

在写数据报表,无意中这样写,发现这个东东。 我觉得我对 PHP 的理解还不够深入,所以发出来想听听大家的建议,学习下!


<?php

class A{

    //1
    public function run(){
        $x = 0;
        while(1){
            $x ++ ;
            $this->func1();
            if($x > 10){
                exit;
            }
        }
    }

    //2
    public function func1(){
        $arr1 = [];
        $arr2 = [];
        $arr3 = [];
        $arr4 = [];
        $arr5 = [];
        $arr6 = [];
        $arr7 = [];
        $arr8 = [];
        $arr9 = [];
        //以上一样结构的数组 ,有数据

        if(!function_exists('findAndGive')){
            function findAndGive(&$arr){
                //....
            }
        }
        findAndGive($arr1);
        findAndGive($arr2);
        findAndGive($arr3);
        findAndGive($arr4);
       //...省略



    }
}

findAndGive()这个方法会报错: Cannot redeclare

我现在只好用$func1 = function(){}先了。


没事了,我现在也好了。我不知道刚是咋了。。。

1781 次点击
所在节点    PHP
4 条回复
mingyun
2018-08-19 00:38:51 +08:00
类方法里定义普通方法,好怪
godgrp
2018-08-19 09:38:14 +08:00
去掉 functions exists 判断
Joyboo
2018-09-13 19:00:54 +08:00
OOP 了解一下,有相同,继承它,重写它
konakona
2018-09-18 18:07:06 +08:00
@Joyboo 不是不是,亲,真不是基础问题。我写了快 10 个年头了。问题出在我理解不了的地方,可能跟 PHP 不同版本的回收机制有关。当时遇到问题的相同代码,给项目组另一位同事 run 是完全没问题的。我 run 就不行。等我将 function 移到外部 php 然后 require_once 后,问题就解决了。过了几个小时后,我通过 phpstorm 的 local history,找回当时报错的代码版本,再次 run。问题又没有了。所以代码是没问题,只是会出现这种不稳定的情况以我这种没参加过 PHP 核心小组的普通人来讲,理解不了。但是后来我知道,这种时候,我应该微笑……啊不是应该用 function () use (){}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481062

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX