此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【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
楼主【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
<?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 ');
?>
如果从效率的角度讲 . 是个运算符 而LZ的类呢 函数 对象 根本没有可比性更简单的例子 1+1 使用运算符和用模拟加法的位操作 有效率的可比性么LZ的代码写的很漂亮但质量实在不敢恭维
microtime() 这个函数从PHP5起就有可选参数了 分割字符串操作数组早已经是过时的代码了
如果仅仅是
array_push($this->list,$str);
$this->list[] = $str; 这样更方便也更快捷 同样是实现一件事用操作符和函数的区别 PHP不是JAVA 不是所有东西都要CLASS的 呵呵从LZ的对比测试中可以得出
php5的类的效率还算不错
php的数组插入效率很高用对象 数组 函数模拟运算符的效率只有4-5倍的效率差距 应该可以说明问题
谢谢楼上对我的代码认真的阅读,说实在话,我已经是少有6年没有碰一下php了,以前php3,php4用的也不是特别熟。我写这个类的本意是想让字符串组合操作的效率更高一些,哪知道php的字符串和其他面向对象的string类性质完全不同。
php内部已经对字符串操作作了很好的性能优化。
PHP和C#运行机制不太一样 不太好直接比较吧 现在的机器对那点效率早已经不太注意了不知道LZ说的字符串操作是指对那些 最好能给出代码
而且,文字串的操作方式应该也是有区别的。
在PHP下,直接用内部函数速度应该更快。并不是在所有的情况下,目标指向都行得通。
在文字串方面,C#的思维方式应该是模仿Java的,
而在C#或Java中,之所以StringBuilder的处理速度比String快,
主要是因为String其特殊的实现方式决定。
你这种对比局限性太大。而且缺乏科学性。就像军事杂志上对比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#的那些东西扔掉。
那么多分析和注释竟然被无视了-_-#还有一点就是这样写比较便于设计。还有个相关的工程想必有人会感兴趣。
Quercus 纯Java PHP5引擎 http://bbs.phpchina.com/thread-65208-1-1.html
其实php的效率是不是主要因为是脚本解释的问题,如果用了zend引擎优化以下是不是速度就快一些了呢?
兄弟不要扯远了,我们在讨论语言层面的事情,不要上纲上线。
google,yahoo它们不用.net 主要是由于历史原因。
至于说.net没有大型系统的案例,请看msn网站,mircrosoft.com, 这些网站在全球排名都是前10位的
再看国内的,起点中文网,各大银行的很多系统,都是.net架构,其中起点中文网的pv 上2亿以上。
要不微软的企业产品线都要取消算了
不知道各位记不记得前两天CSDN网站升级,论坛不能回帖、不能访问?
同样的省级很多网站都在进行,但是,Amazon、Google、Yahoo这些网站绝对不允许这种暂停服务的现象出现。
他们是怎么做到的?最起码用微软产品是做不到的。并不是要把微软一棒子打死,也不是说微软一无是处,用微软的工具赚大钱的有的是,不用微软的穷鬼也一大帮(我就是其中之一)
只不过像旱马吉普,你是用(卖)民用型还是军用型,选择都在自己。
Php脚本解析的速度已经很快了,我记得一个访谈里Yahoo工程师说过,Php脚本在运行时90%的时间是在等待数据库查询结果。
可能没这么夸张,但足以显示出硬盘读写操作在Web程序中是一个凸显的弊端。我们也有很多相关技术去减少这些"低效"的操作。
值得庆幸的是MySQL也提供了一套高速缓存机制,并在逐渐完善。Php include文件的速度也是十分慢的,但现在MMcache(相关的比如eA),ZO,……都提供了强大的脚本缓存机制。
而数据库等硬盘读写操作,可以使用memcache,APC等构建数据持久层来解决这个问题。(很多脚本缓存工具也提供了内存操作方法)
还有Varnish,Squid等工具和相关技术来实现反向代理,DNS分发(最原始的平横负载方式)等,也可用来减少脚本执行提升效率。
……总体来说Php的效率问题多产生于周边支持。