楼主别气了,来CSDN都是讨论问题的,出现嘴角冲突是不可避免的了

解决方案 »

  1.   

    用得好的话可能也相当有用,不过也可能造成维护困难。具体的没试过在function中包含include
      

  2.   

    我不生气~~~呵呵~~~~我把主题改改~~~~
    现在的主题是:如何提高PHP程序的复用,如何降低偶合,提高内聚前段时间在CU上讨论过,我再拿这来问问~~~能学不少东西的话题~~~~高手都出着吧~~顺便说一下接分的别来了~~~~讨论问题的进~~~
      

  3.   

    在程序上看来都没错,但是 在function中include确实不好,我从来没有这样用过! 怪怪的!
    维护也比较麻烦!
      

  4.   

    http://expert.csdn.net/Expert/topic/2644/2644526.xml?temp=.1727869另开一帖讨论~~~
    本帖就算是送分了~~~
      

  5.   

    呵呵,也难怪
    是有点奇怪的用法,从常理上来看,真的不适合在function中include,有点奇怪。
      

  6.   

    1、在函数中有条件的include完成某个特定任务的程序块,这是无可非议的。这恰恰是php为加速程序的运行的一种有效的手段。着与“软件工程的低偶合、高内聚”并不矛盾
    2、php是函数型语言,且不支持函数的重载。终究有一天你会发现具有明确示意的函数名都被用光了,给函数命名也成了头痛的事情。
    3、于是php引入了“类”。继承、重载当然可以较好的解决一些矛盾,但也带来一些新的问题——程序文件增大、复杂结构的解析导致运行速度下降。
    4、php作为B/S结构的服务方语言,运行效率始终应放在首位一点浅见,敬请指正!
    争论是正常的,漫骂就不好了。
      

  7.   

    如果方便的话。请楼主给个例子说说看。在function中使用include的例子
    或许我有更好的见解。也想看一下这其中的不足之处。
    但是,我的第一感觉是有点怪怪的!
    欢迎更多的php的朋友进入讨论!!!
      

  8.   

    to xuzuning(唠叨)1、在函数中有条件的include完成某个特定任务的程序块,这是无可非议的。这恰恰是php为加速程序的运行的一种有效的手段。着与“软件工程的低偶合、高内聚”并不矛盾
    =====================
    这是一种纯粹的代码偶合,比较好的方法是将include段写成函数或过程~~在function外include,直接调用function。而且include并不会加速程序运行~~~因为本身include也是函数,也有函数调用的开销。
    --------------------
    2、php是函数型语言,且不支持函数的重载。终究有一天你会发现具有明确示意的函数名都被用光了,给函数命名也成了头痛的事情。
    =====================
    不知道你有没有用过类,不过当你使用类的时候会发现良好的类设计可以避免你说到的情况。
    -----------------------
    3、于是php引入了“类”。继承、重载当然可以较好的解决一些矛盾,但也带来一些新的问题——程序文件增大、复杂结构的解析导致运行速度下降。
    =======================
    实际上文件增大并不代表结构就会复杂,引入类实际上是为了降低复杂度的一种做法。诚然,在小的工程中使用类也许带来的好处并不明显。而且糟糕的类设计可能还会影响程序的可读性和运行效率,但这不代表类会带来“程序文件增大、复杂结构的解析导致运行速度下降”这样的问题。相反由于类在解释后有缓冲,在经过一次调用后,后面的执行会大大加快。在CU上我写过一段比较类和FUNCTION速度的程序,别人实验和我的实验的结果一样。虽然实验并不完全说明问题,但也能代表一个方面。
    ------------------------------
    4、php作为B/S结构的服务方语言,运行效率始终应放在首位
    =======================
    在效率的权衡上一直有争议,这个是不可否认的。到底是运行效率放在首位,还是开发效率放在首位很难一盖而论。但是有一点很明确:不可以为了很小的运行效率的提高而放弃开发效率。这样所带来的后果就是成本成倍增加。编程语言从机器码一直演化到今天的中间件等等手段,就是牺牲运行效率来换取开发效率。“php作为B/S结构的服务方语言,运行效率始终应放在首位”不论是C/S还是B/S。都应该寻找效率平衡点,而不可为了一个效率而放弃另一个。不知是否有不同观点,请指教,谢谢~~~
      

  9.   

    to mikespook(Mike大懒猫) 看过楼主的提出的原帖了,我想那位仁兄指的不过是你没有找出问题的真正原因吧,并非是指你的对于软件工程的看法不对。
    看来程序员都有点冲呀,仅仅别人说了两个字就能发表段檄文真是了不起,我想对于这种芝麻绿豆的小事情也不用发一篇帖子来声讨一番吧。
    。想起白岩松说过一句话:“愿所有的中国人都能心平气和”,要做到心平气和真的是不太容易。不知道楼主这样的个性能跟多少人合作,现在的公司招人几乎都要求一条----"要有团队合作精神",跟阁下合作的我想都一定是高手(脾气要好,技术要好,协调能力要高,语言技巧要出色……)看了你to 唠叨的回应,深感到阁下对技术的“精湛”。
    1.软件工程是要求低偶合,高内聚。在函数中引入其他的程序块这种写法没有用过,我也觉得不是很舒服,但这种写法我想在某些情况下可能也会用得着,不过我可能会把那一块写成一个函数来调用。其实就功能来说,这两都并无不可。有可能要引入的处理很大,要返回的东西很多或写成函数很费力,直接引入程序块也是可以的,但如果整个项目的风格都是这样,那就有点不爽了。
    2.我想版主用类的时间不会比你少。用类当然可以比较好的解决命名冲突,但唠叨是在函数范围内说明问题。在类里当然可以重载方法,但在函数里不行。
    3.在php中,每一次使用类都是重新加载的,这跟jsp是不同的。所以在php中用类的效果不是特别好,当然在一些用类处理特别舒服的时候那是例外,比如购物车。如果可能的话请给出你的测试程序,对于简单结构的类其速度与函数的差别应该不是很大,但是在一个上万行的项目中这种差别还是比较明显的。
    4.这一点上我同意你的看法。是应该在开发效率和运行效率上求平衡。
    综上,可以看出楼主对于oop是很偏好的。但是是否可以不要那么死啃书本,灵活的处理问题呢?include ("不知是否有不同观点,请指教,谢谢~~~");
      

  10.   

    我是来学习的,请楼主赐教!!!顺便再说说到底OOP是什么呢?
      

  11.   

    1、不使用,不载入。
      php程序载入后到当前http协议结束时将退出内存。所以根本不需要载入使用几率很小的程序文件,而只在需要是加载
    3、引入类实际上是为了降低“开发”复杂度的一种做法
      如果你认真看一下C++的编译程序就会发现:编译程序在费力的维护着一张类的派生链表。因为他并不可能预知在何时、何处在何层次上创建了一个实例。
      应该说windows系统的迅速膨胀与oop有很大关系
      

  12.   

    晕,现在我倒成过街老鼠了?得,我还是接这这个话题说~~~问题1:我说了,从语法的角度上说这么用没错。但是从工程的角度说是不合适的。“有可能要引入的处理很大,要返回的东西很多或写成函数很费力”第一点“要引入的处理很大”不论是什么样的程序,如果现有语言完成不了的情况下那不可以强求来完成。对么?那么遇到“要引入的处理很大”这种情况的时候,应该考虑更有效率的方法,比如扩展接口一类。而不应该使用类似include包含到function中这样的小技巧来提高速度。
    第二点“要返回的东西很多”
    不知道你对PHP序列化了解多少,我了解的并不是很多,但是似乎这个问题可以用它来解决。当然树组什么的也可以。而且函数并不是只有返回值,你依然可以用类似C中的参数回传的方法啊。
    第三点“写成函数很费力”
    我从来都不相信写成函数会很费力这样的说法。如果能用include来包含。那你无须做任何改动。只要function {}即可将其作为函数,并且调用。即不会使运行效率降低,还方便管理。你说呢?问题2:我只是表达我的意思。我并不认为斑竹比我写程序写得少或者怎么样。观点可以不一样,我只是说我的观点摆出我的论据而已。至于函数重载问题希望大家看看这篇帖子《很多人说php4不能支持函数重载》
    http://www.chinaunix.net/jh/27/189443.html这个方法不光应用在类,对于函数也是可行的~问题3:我见过类似你这种观点。我不否认PHP中每次使用类会从新加载。对于上万行的项目,我也不认为类和函数会有很大差别。因为你不可能将所有的功能都写入一个类吧?那么每次是在服务器上执行的,也只是一小部分而已。所以不论上万行的工程,还是一个简单的留言板,在使用类的时候不会有区别。你说呢?问题4:感谢支持综上,感谢你参与讨论。我对OOP并没有特别的偏好。我只喜欢用最简单,最有效的方法来解决我的问题而已。至于啃书本的问题,抱歉,我从来不啃书本。只是闲了看看而已。至于我的观点和问题,也只是我自己的一点想法。class thx
    {
       var $mName;
       var $mWord;
       function thx($name)
      {
        $this->mName = $name;
      }
      function word($word)
      {
        $this->mWord = $word;
      }
      function write()
      {
        $varnum = func_num_args(); 
        $varary = func_get_args();
        switch($varnum)
       {
         case 0:echo "感谢".$this->mName."参与讨论。并祝".$this->mWord;break;
         case 1:echo "感谢".$this->mName."参与讨论。并祝".$varary[0];break;
         case 2:echo "感谢".$$varary[0]."参与讨论。并祝".$varary[1];break;
       }
      }
     
    }$thanks = new thx("ustb(偶然)");
    $thanks->write("新春愉快,合家幸福!");忽忽~~~
      

  13.   

    第一,使用include来提高速度,不是我说的,我也不支持。
    第二,函数当然可以只有过程,并不是一定要返回,至于用数组返回那更是可以,我也常这么干。
    第三,阁下的技术是很强,我也相信没有什么问题可以难得住阁下,不过我很笨,有时会有一些问题想不明白,当然也写不出函数,所以不便继续讨论下去。
    第四,如果php的OOP真的强于jsp,C++我相信没有人会去用jsp,C++来写东东了。php是专于网络,所以效率第二(我不知道第一是什么)。
    第五,你给的帖子看过了,这是方法的重载,当然是可以的,我也这么干过,我所指的函数的重载是指不在类中,你写两个同名函数试试。
    第六,我的机器可能出了一点问题,等我检修一下再说,不过在我折机器之前我看了一下我写的两个版本的东西速度区别很大。
    第七,对于最后的一段程序我可能会更简单:
    <?php
    function write($user,$words)
    {
        echo "感谢".$user."参与讨论。并祝".$user.$words;
    }
    write("mikespook(Mike大懒猫)","新年快乐");
    ?>
      

  14.   

    1.我没说你是说的用函数内含include来提高速度。
    2.那么在这个问题上咱们的观点已经统一了。来香滨,庆贺一下。
    3.我不明白阁下的意思。有问题就该解决,如果就此搁置,那会成为毒瘤。所以请继续讨论。
    4.我并不是说PHP的OOP强于JSP。我也从来没有举例说过类似的问题。我只是说一个好的工程应该规范。那么你完全可以在整个工程中只使用function。但不应该在规范的时候又人为添加破坏规范的东西,比如函数中使用include。注意,我没说你支持这个,我只是打个比方。
    5.写两个同名函数,这就钻牛角尖了吧?既然已经实现了重载那何必去管是怎么实现的呢?难道只有写两个同名函数就叫重载,而其他方法就不叫了么?
    6.不知道你说的你的两个版本的代码差别在哪,而运行的时候的差别又在哪。
    7.我只是用一个例子来说明重载,我并没有说类就一定简单。请注意我的原话:“在小的工程中使用类也许带来的好处并不明显。而且糟糕的类设计可能还会影响程序的可读性和运行效率”所以请仔细阅读我的帖子,末要会错意~~~
      

  15.   

    除非很复杂的对象,一般尽量不要写成类,类的构造和析构总是会耗时间和资源的
    我个人觉得PHP是继承了C的过程编程,类的加入只是后来添加的功能,主要是为了
    面向对象编程,有利有弊。就象Dreamweaver一开始软件总是很小,很方便,版本越
    来越高,软件就越来越大,加了很多功能进去,启动很慢,有时候也不一定就是最好的。
    又好比,简单的文字编辑我还是喜欢用notepad,在运行里输入notepad就行了,启动
    很快,系统自带,只要是windows机器都可以用,还可以保存成任何类型的文件,
    有时候简单一点也没什么不好。
    关于系统整合,代码和视图分离,要做个通用平台确实不是简单的事,毕竟网页设计者
    和代码编写者之间不是那么容易沟通,还是需要具体问题具体分析。
      

  16.   

    1、function在过程里叫“函数”,在类里叫“方法”。这不仅仅是称谓问题,因为他们有质的区别
    2、当你include的文件很大,比如含有数百k的对照表时。你就会感觉到了
    3、在函数需要较多的参数时,在调用时罗列参数也是很费劲的。若以全局变量出现,倒也是可以的。尤其是你在移植c程序时。使用include引入全局变量声明,也不失为好办法。4、你的thx类的write方法如写作  function write()
      {
        $varnum = func_num_args(); 
        $varary = func_get_args();
        switch($varnum)
       {
         include "filename.h";
       }
      }filename.h
    <?
    case 0:echo "感谢".$this->mName."参与讨论。并祝".$this->mWord;break;
    case 1:echo "感谢".$this->mName."参与讨论。并祝".$varary[0];break;
    case 2:echo "感谢".$$varary[0]."参与讨论。并祝".$varary[1];break;
    ?>
    那么就可以不修改程序而改变输出的内容,哪怕是程序被编译了
      

  17.   

    THX xuzuning。理解你的意思了~~~那么你说的“2、当你include的文件很大,比如含有数百k的对照表时。你就会感觉到了”
    是不是就是在类似编码一类的程序中编码表这样使用就会有优势?
      

  18.   

    4、你的thx类的write方法如写作这个我并不赞成~~~~这样的话实际上filename.h的复用就很低。我不能保证每个类似的函数中都是用mWord的成员变量,或者varary的内部变量。不过如果“那么就可以不修改程序而改变输出的内容,哪怕是程序被编译了”似乎也只能这样include。看来我这个类设计的有问题喽,呵呵~~
      

  19.   

    上回说到……
    错了。
    1,既然都不支持用include那就扔开吧。
    2,先把香槟干了。
    3,比如说最近我在写一个树形结构时遇到一个问题,想打开一个有三级的目录,并且最高级的就六个甚至更多,我想用一个函数来实现,写了一下午也没有成功,也许阁下可以指教一下。
    4,规范固然是好的,我也支持,但不应强求,为了规范而规范那就有点^-^
    5,是我不对,检讨,不过我可能会先继承一下然后重载方法。没有阁下的简单,但应该再规范了吧(全是类,一个函数都没有)。
    6,两个版本的代码一个是类写的,一个是函数写的。有可能你来写类花的时间比函数的更少。我比较菜。
    7,
    /* 我不知道这叫不叫重载,但我习惯于这样用,个人感觉不容易出错。*/
    class thx
    {
        var $mName;
        var $mWord;
        function thx($name,$word)
        {
            $this->mName = $name;
            $this->mWord = $word;
        }
        function write()
        {
            echo "感谢".$this->mName."参与讨论。并祝".$this->mWord;
        }
    }class  newthx extends thx
    {
        function write($user,$words,$date)
        {
            echo "感谢".$user."参与讨论。并祝".$words."-------".$date;
        }
    }$name = "mikespook(Mike大懒猫)";
    $word = "新年快乐";
    $date=date("Y-m-d H:i:s");$thx1 = new thx($name,$word);
    $thx1->write();
    //-------------------------------
    $thx2 = new newthx($name,$word);
    $thx2->write($name,$word,$date);
      

  20.   

    网络嘛,必然又不合意的事咯.
    不过这样也好,高手都出来争论了...太长了,save回家研读.消消气,过年了.
      

  21.   

    ustb(偶然)的这个写法应该叫重构,和重载不是一个事
      

  22.   

    3,比如说最近我在写一个树形结构时遇到一个问题,想打开一个有三级的目录,并且最高级的就六个甚至更多,我想用一个函数来实现,写了一下午也没有成功,也许阁下可以指教一下。递归呢?这样的问题好象递归会简单些~~~http://bbs.chinaunix.net/forum/27/20040108/239532.htmlshukebeita 太牛,牛得比牛还牛~~~~看看他这个~~~
      

  23.   

    不过,并没有看到什么新意。
    你可以看一下精华区中我的“树”类
    如果你有我的netBook那么你就能看到更多的了