此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【coollzh】截止到2008-07-01 12:47:06的历史汇总数据(不包括此帖):
发帖数:5                  发帖分:440                
结贴数:0                  结贴分:0                  
未结数:5                  未结分:440                
结贴率:0.00  %            结分率:0.00  %            
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

解决方案 »

  1.   

    感觉php板块比asp.net版冷清多了
      

  2.   

    PHP为什么需要一个StringBuilder?
      

  3.   

    StringBuilder在C#里也不可能是用数组来实现的。没有可比性。
      

  4.   


    <?php
    class StringBuilder
    {
    /*@var $_string Array */
    private $_string = array();
    /**
     *  a new string resource init
     *  初始一个字符处理
     * @param Array $str
     */
    public function __construct($str = null)
    {
    $this->setString($str);
    }
    /**
     * Set string a new life:)
     * 为处理对象赋予一个新的值
     * @param Mixed $_string
     * @return StringBuilder $this; # This is for IDE and other tools 为了得到各类工具的支持 比如ZDE 的 语法提示
     */
    public function setString($_string)
    {
    settype($_string,'array');
    $this->_string = $_string;
    return $this;
    }
    /**
     * get _string
     * 获取 _string
     * @return Array $_string
     */
    private function getString()
    {
    return $this->_string;
    }
    /**
     * append a string ;
     * 为当前元附加字符串
     * @param String $str
     * @return StringBuilder $this;
     */
    public function append($str)
    {
    settype($str,'string'); # We should keep base object wooooork ;
    end($this->_string);
    $this->_string[key($this->_string)] .= $str;
    return $this;
    }
    /**
     * push a new element
     * 新增元
     * @param String $str
     * @return StringBuilder $this;
     */
    public function appendLine($str)
    {
    settype($str,'string');
    $this->_string[] = $str; # In this method is cheaper.新增元可以使用这种方式来避免访问函数所产生的资源浪费。
    return $this;
    }
    /**
     * append an format string;
     * 为当前元附加一个有格式控制的符串
     * @param String $str
     * @param mixed $args
     * @return StringBuilder $this;
     */
    public function appendFormat($str,mixed $args)
    {
    settype($str,'string');
    $str = sprintf($str,$args);
    $this->append($str);
    return $this;
    }
    /**
     * give me the string-_-#
     * 获取成品string
     * @param String $separater 填充结合元缝隙
     * @return String
     */
    public function toString($separater = null)
    {
    return implode($separater,$this->_string);
    }
    /**
     * destory _string
     *
     */
    public function __destruct()
    {
    unset($this->_string);
    }
    }class test extends StringBuilder
    {
    public function __construct($str)
    {
    parent::__construct($str);
    }
    public function getMyString()
    {
    # $this->_string = 'MoXie'; ->
    $this->setString('MoXie');
    # 如果 _string 为 protected 那么下面这个方法当然会出错
    # 所以我们需要一个寄存器来控制对_string的访问
    return $this->toString();
    }
    public function getOtherString($separater = null)
    {
    return $this->toString($separater);
    }
    }
    $test = new test("o");
    echo $test->getMyString();
    echo "\n";
    $test->append(' said haha!');
    echo $test->getOtherString();
    echo "\n";
    $test->appendLine('hehe!');
    echo $test->getOtherString(' and ');
    ?>
      

  5.   

    真不明白LZ的StringBuilder是干啥用的 
    如果从效率的角度讲 . 是个运算符 而LZ的类呢 函数 对象  根本没有可比性更简单的例子 1+1 使用运算符和用模拟加法的位操作 有效率的可比性么LZ的代码写的很漂亮但质量实在不敢恭维
     microtime() 这个函数从PHP5起就有可选参数了 分割字符串操作数组早已经是过时的代码了
    如果仅仅是 
    array_push($this->list,$str);
    $this->list[] = $str; 这样更方便也更快捷 同样是实现一件事用操作符和函数的区别 PHP不是JAVA 不是所有东西都要CLASS的 呵呵从LZ的对比测试中可以得出
    php5的类的效率还算不错
    php的数组插入效率很高用对象 数组 函数模拟运算符的效率只有4-5倍的效率差距 应该可以说明问题
      

  6.   


    谢谢楼上对我的代码认真的阅读,说实在话,我已经是少有6年没有碰一下php了,以前php3,php4用的也不是特别熟。我写这个类的本意是想让字符串组合操作的效率更高一些,哪知道php的字符串和其他面向对象的string类性质完全不同。
    php内部已经对字符串操作作了很好的性能优化。
      

  7.   

    但是搞不明白的是,php的类的效率确实不怎么样。我用c#写同样的代码,效率是php的4倍,这个4倍不是指上面的类,而是用php内置的字符串操作库函数。也就是说php的字符串操作还有优化的余地,不知道pear有没有这方面的类库
      

  8.   


    PHP和C#运行机制不太一样 不太好直接比较吧 现在的机器对那点效率早已经不太注意了不知道LZ说的字符串操作是指对那些 最好能给出代码 
      

  9.   

    php的数组跟c#或者是Java的数组是两码事,
    而且,文字串的操作方式应该也是有区别的。
    在PHP下,直接用内部函数速度应该更快。并不是在所有的情况下,目标指向都行得通。
    在文字串方面,C#的思维方式应该是模仿Java的,
    而在C#或Java中,之所以StringBuilder的处理速度比String快,
    主要是因为String其特殊的实现方式决定。
      

  10.   


    你这种对比局限性太大。而且缺乏科学性。就像军事杂志上对比J-10和F-22谁更强一样,纸上谈兵。具体C#到底怎么样,其实整个IT业界已经有了一个评价,
    Google、Yahoo等大型网站,有用Java、PHP、Perl、Python、C的,但是,无论核心部分还是表面部分,没几个公司敢用.net系统的。
    的确,在很多股票交易所、银行系统等大型系统中也有用Windows产品,不过,大多数情况都是为了便于跟客户数据对接,PC用户几乎都是windows,很少听说是为了什么高效率或者安全性。具体说到C#,他没有任何新东西,在.net中微软鼓吹的所谓新东西,可能在.net诞生之前,Java、php或者Lisp中就已经有了。
    如果想写出优秀的php代码,建议把C#的那些东西扔掉。
      

  11.   

    效率当然不能比直连了,更不能比c#。 至于方便是否得看个人感受了。
    那么多分析和注释竟然被无视了-_-#还有一点就是这样写比较便于设计。还有个相关的工程想必有人会感兴趣。
    Quercus 纯Java PHP5引擎  http://bbs.phpchina.com/thread-65208-1-1.html
      

  12.   


    其实php的效率是不是主要因为是脚本解释的问题,如果用了zend引擎优化以下是不是速度就快一些了呢?
      

  13.   


    兄弟不要扯远了,我们在讨论语言层面的事情,不要上纲上线。
    google,yahoo它们不用.net 主要是由于历史原因。
    至于说.net没有大型系统的案例,请看msn网站,mircrosoft.com, 这些网站在全球排名都是前10位的
    再看国内的,起点中文网,各大银行的很多系统,都是.net架构,其中起点中文网的pv 上2亿以上。
    要不微软的企业产品线都要取消算了
      

  14.   

    你听没听说过mircrosoft.com有时候也要换成Linux+Apache?包括csdn底层应该也是微软的产品,
    不知道各位记不记得前两天CSDN网站升级,论坛不能回帖、不能访问?
    同样的省级很多网站都在进行,但是,Amazon、Google、Yahoo这些网站绝对不允许这种暂停服务的现象出现。
    他们是怎么做到的?最起码用微软产品是做不到的。并不是要把微软一棒子打死,也不是说微软一无是处,用微软的工具赚大钱的有的是,不用微软的穷鬼也一大帮(我就是其中之一)
    只不过像旱马吉普,你是用(卖)民用型还是军用型,选择都在自己。
      

  15.   

    数组用push没有直接赋值来得快,你可以试试
      

  16.   


    Php脚本解析的速度已经很快了,我记得一个访谈里Yahoo工程师说过,Php脚本在运行时90%的时间是在等待数据库查询结果。
    可能没这么夸张,但足以显示出硬盘读写操作在Web程序中是一个凸显的弊端。我们也有很多相关技术去减少这些"低效"的操作。
    值得庆幸的是MySQL也提供了一套高速缓存机制,并在逐渐完善。Php include文件的速度也是十分慢的,但现在MMcache(相关的比如eA),ZO,……都提供了强大的脚本缓存机制。
    而数据库等硬盘读写操作,可以使用memcache,APC等构建数据持久层来解决这个问题。(很多脚本缓存工具也提供了内存操作方法)
    还有Varnish,Squid等工具和相关技术来实现反向代理,DNS分发(最原始的平横负载方式)等,也可用来减少脚本执行提升效率。
    ……总体来说Php的效率问题多产生于周边支持。