V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
konakona
V2EX  ›  PHP

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

  •  
  •   konakona · 2018-08-18 22:31:38 +08:00 · 1781 次点击
    这是一个创建于 2284 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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(){}先了。


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

    4 条回复    2018-09-18 18:07:06 +08:00
    mingyun
        1
    mingyun  
       2018-08-19 00:38:51 +08:00
    类方法里定义普通方法,好怪
    godgrp
        2
    godgrp  
       2018-08-19 09:38:14 +08:00 via Android
    去掉 functions exists 判断
    Joyboo
        3
    Joyboo  
       2018-09-13 19:00:54 +08:00
    OOP 了解一下,有相同,继承它,重写它
    konakona
        4
    konakona  
    OP
       2018-09-18 18:07:06 +08:00
    @Joyboo 不是不是,亲,真不是基础问题。我写了快 10 个年头了。问题出在我理解不了的地方,可能跟 PHP 不同版本的回收机制有关。当时遇到问题的相同代码,给项目组另一位同事 run 是完全没问题的。我 run 就不行。等我将 function 移到外部 php 然后 require_once 后,问题就解决了。过了几个小时后,我通过 phpstorm 的 local history,找回当时报错的代码版本,再次 run。问题又没有了。所以代码是没问题,只是会出现这种不稳定的情况以我这种没参加过 PHP 核心小组的普通人来讲,理解不了。但是后来我知道,这种时候,我应该微笑……啊不是应该用 function () use (){}
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2692 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:30 · PVG 23:30 · LAX 07:30 · JFK 10:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.