文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>讨论一下php的类

讨论一下php的类

时间:2007-02-17  来源:PHP爱好者

这里冷了好久了,今天提出一个关于php的类的问题,望各位谈谈自己的看法,以达到抛砖引玉的目的。
问题一:php的类的效率究竟怎么样?(最好有测试实例)
问题二:各位在什么情况下会用到php的类?常用不常用?
问题三:在php中序列化(serializing)是否有必要?

 夜猫子 回复于:2003-12-08 18:12:30 >问题一:php的类的效率究竟怎么样?(最好有测试实例) 
效率有很多种,你说的恐怕是执行效率,速度肯定没有不用类快。
OOP的目的并非在于代码执行效率上的提高,而是代码维护和设计上的方便,而且还要看设计者对OOP的理解,OO并非是万能的,用得不好,不但损失执行效率,维护起来也会麻烦。

>问题二:各位在什么情况下会用到php的类?常用不常用? 
常用

>问题三:在php中序列化(serializing)是否有必要?
我也有此疑问,对象的serializing我清楚是怎么回事,但是不清楚的是什么时候会需要到serializing,还没有碰到这种需求,望各位达人有以教我,增长见识。

longnetpro 回复于:2003-12-08 20:54:31 对于OOP的程序来说,主要是在编译上效率比直接用函数来得低。而运行编译后的代码却不一定效率低,特别是对C++之类的编译型语言是这样,因为到最后都是优化后的机器代码了。PHP的解释型语言,每次编译脚本要花大量的时间,而且编译完了还要对中间代码进行解释,而这两个过程对类的操作都比没有类的操作效率低。因此如果有缓存一类的机制,节省了编译过程,效率肯定会大幅度提高。

tonera 回复于:2003-12-09 10:42:20 使用php类的执行效率争论的很多。不知道楼上两位有没有自己写一个测试代码测试一下,我想这样更有说服力。

有很多人很不赞成大量的封装,说会造成执行效率降低。但在一些大中型项目上,使用这些类会省很多事。[b:e24950e6fc]我想知道怎么样才能在这两点上找到一个最好的切合点?[/b:e24950e6fc]
我过几天会得到一个中大型网站的源代码,据说根本就没有用到一个类!到时与大家分享一下。

mikespook 回复于:2003-12-09 10:50:36 我实验的结果好象不是这样~~不知道是不是我的代码有问题~~~~
其实类封装只不过是一种形式,不论解释语言还是编译语言我觉得在编译器面前不应该有区别。
class test
{
$i;
fuction($a)
{
$i=$a;
}
}

$i;
fuction($a)
{
$i=$a;
}
在本质上没有区别~~~

下面是我实验的代码,在我的机器上类的比不用类的多数情况下快~~~
<?php
class test
{
function add()
{
for($c=0;$c<5000000;$c++){
$g=1+1;
}
}
}
$nowtime = explode(" ", microtime()); 
$starttime = $nowtime[1] + $nowtime[0];
for($c=0;$c<5000000;$c++){
$g=1+1;
}
$nowtime = explode(" ", microtime()); 
$endtime = $nowtime[1] + $nowtime[0];
$totaltime = ($endtime - $starttime); 
echo $totaltime."<br>";

$nowtime = explode(" ", microtime()); 
$starttime = $nowtime[1] + $nowtime[0];
$c = new test;
$c->add();
$nowtime = explode(" ", microtime()); 
$endtime = $nowtime[1] + $nowtime[0];
$totaltime = ($endtime - $starttime); 
echo $totaltime;
?>

longnetpro 回复于:2003-12-09 11:43:15 我看这个问题,不能一概而论,要想真正搞清楚原因,瞎猜是不行的,只拿所谓的测试结果也是不行的,因为谁知道你测试的手段和方式是不是正确呢?你测试的是不是完全呢?最重要的是搞清楚它工作的原理,即解析符号(词法分析),语法分析,翻译成中间代码(伪编译)及解释中间代码整个过程,才能针对面向对象和纯函数两种方式分别进行严格的数学推导得到基本准确的相对效率值。还有这个效率不光是与形式有关,也与代码本身有极大的关系。我觉得很难得到一个绝对的说法。

tonera 回复于:2003-12-09 12:06:29 我用mikespook代码在我的机器上测试了一下:
配置:win2000 server + apache 1.3.28 + php4.3.3   CPU:C1.2G 256MSDRAM
测试9次,每执行完一次就刷新一次。
数据如下:
第一行是用函数,第二行是用类的测试结果。
5.9582079648972
6.3706979751587

5.8113529682159
5.8560619354248

5.8661880493164
5.7080310583115

5.8290740251541
5.7002680301666

5.8636230230331
5.6893019676208

5.782252907753
5.7040009498596

5.8606799840927
5.725781917572

5.778746008873
5.9094309806824

6.2650370597839
6.193382024765
我把$g=1+1;改为$g+=1;的测试结果。
5.6033079624176
6.5898529291153

5.6008509397507
5.5063310861588

5.569482922554
5.5638710260391

5.5429639816284
5.5180859565735

5.635950922966
5.5657910108566

5.5429580211639
5.5499809980392

5.6193469762802
5.5487819910049

5.547052025795
5.4819489717484

5.5688099861145
5.4736850261688

[b:11244e4e65]结果发现一个有趣的现象,在第一次执行时,用类没有直接用函数快,第二次后,用类反而在多数时候比直接用函数还要快。[/color:11244e4e65][/b:11244e4e65]我没有用zend编译执行。
要是用了zend,用类的效率是不是会更好?!!!谁说php的OOP不行?

当然,这个程序只是测试出了php类的数学计算能力。

cyberteddy 回复于:2003-12-09 12:32:42 在php中序列化是很有必要的,尤其当你在不同的页面传递很多不同的变量时。通过序列化,可以把变量的内容以字符串的形式保存。如果你研究过一些经典的PHP程序如VBB,你会发现序列化用得比较多,当用cookie or post/get方法很不方便时,它的优势就会明显。比较常用的就是把数组(包含一些用户登录后的数据)序列化再用MD5加密后,用setcookie的方法保存,需要时再反序列化回来,十分方便处理。
序列化的另外一个重要应用是:对象的序列化。需要在不同页面间传递对象变量时,可以使用。
当然你也可以把序列化后的结果保存到数据库,需要时再调用。

tonera 回复于:2003-12-09 12:47:28 cyberteddy  说的:“序列化的另外一个重要应用是:对象的序列化。需要在不同页面间传递对象变量时,可以使用。 
当然你也可以把序列化后的结果保存到数据库,需要时再调用。”

在不同页面传递变量时我们一般用session就够了。
我就是不知道在什么情况下我们需要用到它(序列化)。它有哪些优点。变量多的时候我都用session数组。
不知道你有没有这方面的案例?

shukebeita 回复于:2003-12-09 13:16:35 [quote:a0c7e19fcf="tonera"]cyberteddy  说的:“序列化的另外一个重要应用是:对象的序列化。需要在不同页面间传递对象变量时,可以使用。 
当然你也可以把序列化后的结果保存到数据库,需要时再调用。”

在不同页面传递变量时我们一般用s..........[/quote:a0c7e19fcf]
[quote:a0c7e19fcf="cyberteddy"]在php中序列化是很有必要的,尤其当你在不同的页面传递很多不同的变量时。通过序列化,可以把变量的内容以字符串的形式保存。如果你研究过一些经典的PHP程序如VBB,你会发现序列化用得比较多,当用cookie or post/ge..........[/quote:a0c7e19fcf]
在不同页面传递很多不同变量可以使用Session,而不是专门的serialize()函数(当然Session内部使用到了序列化的技术)这个函数主要是为了保存复杂的数据结构设计的比如说对象,相当于把具有活力的精子,快速冷冻保存一样,将来需要的时候可以解冻恢复活力。

但是由于序列化采用的是字符方式保存复杂对象,对于对象的成员能够完整的保存和恢复,但是对于对象的方法不能够尽善尽美,如果需要完全恢复这个对象必须要有这个对象的类的声明。

从手册上抄一段:
[code:1:a0c7e19fcf]
<?php 
// classa.inc: 

class A 

var $one = 1; 

function show_one() 

echo $this->one; 



// page1.php: 

include("classa.inc"); 

$a = new A; 
$s = serialize($a); 
// store $s somewhere where page2.php can find it. 
$fp = fopen("store", "w"); 
fputs($fp, $s); 
fclose($fp); 

// page2.php: 

// this is needed for the unserialize to work properly. 
include("classa.inc"); 

$s = implode("", @file("store")); 
$a = unserialize($s); 

// now use the function show_one() of the $a object.   
$a->show_one(); 
?>
[/code:1:a0c7e19fcf]

cyberteddy 回复于:2003-12-09 13:55:42 session有时会有莫名其妙的问题,所以我有时还是比较喜欢用序列化来传递一些变量,这样的应用其实并不少。比如:想保存些数据到cookie里:
setcookie ('name',$user['name']);
setcookie('id',$user['id']);
setcookie('address',$user['address']);
......
如果很多的话,是不是很麻烦,但如果这样:
setcookie ('userinfo', base64_encode (serialize ($user_array)));
取出用:
$user_array=unserialize (base64_decode ($_COOKIE['userinfo']));
是不是简单一些。感觉对象的序列化好象实用性不强。

shukebeita 回复于:2003-12-09 14:13:03 [quote:240b8c8bcf="cyberteddy"]o']));
是不是简单一些。感觉对象的序列化好象实用性不强。[/quote:240b8c8bcf]
session 会有什么莫名奇妙的问题?我想听一听。php里增加的session就是专门干这个活的,如果老出问题那哪行?

你把数据放到cookie里,还是用户信息,那个可是太危险了。session的本质就是自动的序列化,然后将id 放在cookie或者url里,但是把数据放在服务器上。

php中序列化对象不太实用,我同意。但是不是因为把对象序列化不好,而是因为php中对于对象的序列化功能不够全面,希望有后有所改进。

cyberteddy 回复于:2003-12-10 10:39:28 [quote:73f34179b7="shukebeita"]
session 会有什么莫名奇妙的问题?我想听一听。php里增加的session就是专门干这个活的,如果老出问题那哪行?

你把数据放到cookie里,还是用户信息,那个可是太危险了。session的本质就是自动的序列化,然后将id..........[/quote:73f34179b7]
放到cookie里应不存在安全问题,尤其当重要数据如密码用md5等函数加密后。实际上很多著名的程序甚至商业程序都这么做的,而并没因此出现问题。session的问题还是比较多的,而且不同的版本出现的不一样,如有一次用session记录用户登录信息,登录后发现信息丢失,而同样程序在另一php版本下却无问题,后来对比php.ini文件中session一段,也没看出不一样的地方,但抱着试试看的心态,把另外版本php.ini中session部分拷过来,问题就解决了。你说是不是莫名其妙。
而且也曾看到其他人也会有session的问题。后来又发现很多比较知名的程序也没有使用session,不知道是否和session本身存在的问题有关。

shukebeita 回复于:2003-12-10 12:27:09 [quote:569fb2c0d2="cyberteddy"]
放到cookie里应不存在安全问题,尤其当重要数据如密码用md5等函数加密后。实际上很多著名的程序甚至商业程序都这么做的,而并没因此出现问题。session的问题还是比较多的,而且不同的版本出现的不一样,如有一次用s..........[/quote:569fb2c0d2]

cookie的确有大的安全隐患,即便是用户的id,用户名,地址,电话之类的都很重要,这些都属于客户资料通过cookie泄漏都不好。再说客户端还可以禁用cookie你怎么办?

我不知道你所说的著名的程序商业程序是哪些?Window算不算著名的商业程序但是并不能说就没有安全问题(实际上什么情况大家都很清楚了)。所以不要以为一两个商业程序做了就认为那样做就是对的。商业程序的开发和发布100%是由商业因素决定的(时间,开发和维护成本,市场份额等等)。

你所说的session 在各个版本之间不一致的问题($_SESSION变量和session_register()),也是php 出于安全性的考虑所作的改进,所以应当与时具进采用新的方法。

根据你所描述的session 丢失的情况,我初步估计是session auto_start参数没有正确设定的问题。多看手册就能解决,和session本身没有关系。

cookie 是session 的实现手段之一。但是直接将数据保留在cookie里面的确不是什么好办法。请大家慎用。

cookie 这个词比较形象,对于你的浏览器而言cookie就像小甜饼一样虽然不是正餐(html 页面)但是味道不错(包含着一些重要的信息)

session 这个词就比较抽象了。指的是某种事情持续的一个时间段,比如说开会可以根据主题分成几个不同的session。nba 的比赛分为 4个sessions 等等。

越扯越远了 :lol:

tonera 回复于:2003-12-11 10:40:10 确实扯远了。 :D 

不过我用session还没有出现过问题。我从不用cookie,因为很多人都禁用cookie,包括我在内。

mikespook 回复于:2003-12-11 12:19:53 呵呵,我只在无关紧要的地方使用cookie~~~比如计数器防刷什么的~~~
SESSION只和服务器有关系~~~如果session使用有问题,那就是服务器配置有问题~~~~

夜猫子 回复于:2003-12-11 13:19:24 [quote:3bef4317a9="tonera"]确实扯远了。 :D 

不过我用session还没有出现过问题。我从不用cookie,因为很多人都禁用cookie,包括我在内。[/quote:3bef4317a9]
除非你特别设置过,否则你在php里使用session怎么都会扯到cookie的。

iamyess 回复于:2003-12-14 22:12:05 “除非你特别设置过,否则你在php里使用session怎么都会扯到cookie的。”

去看清楚配置~~~

放在 cookie 或 session 没有绝对的安全不安全
要看你怎么设计的问题,用 cookie 同样能实现 session 意义上功能
交给那些只会调用 function 的人就不清楚了

想讨论 php 的类的执行,还企图用 一些实例来说明,这已经说明你们都没有过大型程序的开发经验!不然这话题早停止了, 慢是肯定的,而这点慢有时候是非常值的,那代码不能说明任何东西! 像以前新出了某种语言就用一段循环来比较速度,能说明个p

老是有这种傻问题,恶性循环啊
shit~!

tonera 回复于:2003-12-14 22:33:25 [quote:1ec12c64f2="iamyess"]“除非你特别设置过,否则你在php里使用session怎么都会扯到cookie的。”

去看清楚配置~~~

放在 cookie 或 session 没有绝对的安全不安全
要看你怎么设计的问题,用 cookie 同样能实现 session 意义上功能
..........[/quote:1ec12c64f2]
请息怒。 :D 

[b:1ec12c64f2]这里是PHP版,不是PHP高级应用版![/b:1ec12c64f2]

我想你一出生不会就知道PHP的类的吧。更何况温故而知新呢。
对于一个低手来说,是需要知道这些东西的。
不过,还是要感谢你的发言。

夜猫子 回复于:2003-12-15 00:24:07 >“除非你特别设置过,否则你在php里使用session怎么都会扯到cookie的。” 
>去看清楚配置~~~ 
我知道可以配置成使用url来传递session_id而不依赖cookie,不过我上边这句话也没有问题啊,不知道你什么意思。

>放在 cookie 或 session 没有绝对的安全不安全 
>要看你怎么设计的问题,用 cookie 同样能实现 session 意义上功能 
>交给那些只会调用 function 的人就不清楚了 
是的,用cookie的确可以模拟出session的效果,但是也需要告诉还不清楚的人什么时候用session,什么时候用cookie

>想讨论 php 的类的执行,还企图用 一些实例来说明,这已经说明你们都没有过大型程序的开发经验!不然这话题早停止了, 慢是肯定的,而这点慢有时候是非常值的,那代码不能说明任何东西! 像以前新出了某种语言就用一段循环来比较速度,能说明个p 
我的观点上边已经说得已经很明白,类的出现并非是为了执行的效率,而是代码的维护和软件结构的优越上,看样子楼主所言和我的观点大致相同,但是口气让人不舒服

>老是有这种傻问题,恶性循环啊 
>shit~!
这就真的是感觉不爽了,请你注意一下。
不过企盼你的高水平帖子出现。

shukebeita 回复于:2003-12-15 11:09:33 [quote:786952c709="iamyess"]慢是肯定的
..........[/quote:786952c709]
虽然你也承认了类的作用,但是谁告诉你的类就一定慢?你的态度可以理解但是发脏字就不好了,除了"shit"你还会什么,4个字母以上的单词就拼不到一起了吧,所以学艺不精啦。

[quote:786952c709]大型程序的开发经验[/quote:786952c709]
大型的程序要求高,但是不代表开发过大型程序就有好的经验。小的程序一样可以有好的practice,能够根据客户的需求快速的变大才是最牛的应用,想一想你的身体看看是不是这个道理。
:P 

==================
有说了一些不着边际的话

shukebeita 回复于:2003-12-15 11:51:12 [quote:1264a3079a="tonera"]这里是PHP版,不是PHP高级应用版! [/quote:1264a3079a]
我倒是希望这里能够建成高级应用版,前两天去什么phpx.com看了一下,人到是多,但是太差,实在是浪费。

mikespook 回复于:2003-12-15 14:49:32 [quote:b3c315b9f9="shukebeita"]
我倒是希望这里能够建成高级应用版,前两天去什么phpx.com看了一下,人到是多,但是太差,实在是浪费。[/quote:b3c315b9f9]

那大家一起努力喽~~~~

关于那位“SHIT”某人,大家都说了那么多,我就不再说什么了~~~要不他打喷嚏要从早到晚了~~~呵呵~~~

对于访问控制中使用SESSION,我更喜欢用数据库的方式实现。但是变量传递如果不用SESSION我还真不知道怎么才能高效率完成~~~~我也用过GET、POST的方式来传递参数,但是我想不用说大家也知道,这样的参数传递还不如用SESSION~~~

iamyess 回复于:2003-12-15 16:44:34 非常好,非常好

一下子就揭到痛处

我的语气是不好,但你们尽可学我这种语气,但要把重点放在讨论主题上

关于为什么 使用类就一定慢

首先它是把一些概念封装化了,你使用的只是对象,就这点而言,很像 汇编与C的关系,汇编只快 %20-30% 而已,但 C 仍有存在的道理,如果是纯 oo 的,那我也就没什么话说了,可惜啊,php 目前要兼顾 过程和面向对象~~ 说得不好听的是个杂种了
慢是相对的慢,没想象中慢,但有绝对的趋势的说,慢但如果想讨论具体细微到慢了哪点,那要看 php 在解释时 是怎么解释的,等有空把那 php 的源码看看(有点像讨论微分了)

不过,"小的程序一样可以有好的practice,能够根据客户的需求快速的变大才是最牛的应用" 这点我不否认,但问题是,等你想快速变大是,你还会在乎这一点点的效率,那只能说明你真是牛人了,把这一点点点点的时间都优化出来而且还能快速开发,那我无话可说

我还有个问题,想必阁下对 java 有不爽的感觉吧?(想想我为什么这么问)

别人的疑问我也就不用再解释了,有空就 google 吧

这次要说的 very well

shukebeita 回复于:2003-12-15 17:57:21 [quote:d005cb8eab="iamyess"]非常好,非常好

一下子就揭到痛处

我的语气是不好,但你们尽可学我这种语气,但要把重点放在讨论主题上

关于为什么 使用类就一定慢

首先它是把一些概念封装化了,你使用的只是对象,就这点而言,很像 ..........[/quote:d005cb8eab]
我想我也不会去看什么php 的源码了,第一没有兴趣,第二看不懂。第三它和我想讨论的没有任何关系。我想讨论的不是php的类到底慢在那里了,而是使用oop方法开发的php程序和用过程和函数的方法开发的php程序相比较不一定会慢,主要看人和他的设计,笼统的说使用类就慢有些牵强。

面向对象的程序设计和开发是一个非常复杂的问题,OOP也许最初的想法是便于系统的分析,设计,和维护。但是随着硬件和oop技术的发展,它为程序的优化也提供了便捷的途径。(具体是什么,在这里三言两语肯定说不清楚)

我对java 没有什么不爽的,也不知道你问什么这样问?但是我只会php而已。由于很多讲oop的书是用java 或者C++ 做例子的所以我把他们只是当作学习oop的一种语言而已,如果你看得多了就发现java 和C++能做的PHP 大多也能做。就像各地都有方言,只要我能听懂看懂,传言达意,学习精神就可以了没有什么爽与不爽的。

不同的民族有不同的语言,不同的语言造就了不同的文化,但是几乎每种文化中都有先知和智者。所以语言不会有什么高低贵贱,主要在于思想。我用php能够满足我的需要,又能表达我的想法,我想这就够了。

另外说到杂种问题,我很喜欢杂种女孩很漂亮,还有遗传优势,值得推广。

mikespook 回复于:2003-12-15 19:13:19 [quote:b3d2932ca0="iamyess"]
非常好,非常好 

一下子就揭到痛处 

我的语气是不好,但你们尽可学我这种语气,但要把重点放在讨论主题上 
[/quote:b3d2932ca0]
呵呵,不学,讨论不是吵架。更跟个人恩怨无关~~~
我可不当“狂妄型”
http://zwills.crcoo.com/mikespook/swilllist.asp?id=138

[quote:b3d2932ca0="iamyess"]

关于为什么 使用类就一定慢 

首先它是把一些概念封装化了,你使用的只是对象,就这点而言,很像 汇编与C的关系,汇编只快 %20-30% 而已,但 C 仍有存在的道理,如果是纯 oo 的,那我也就没什么话说了,可惜啊,php 目前要兼顾 过程和面向对象~~ 说得不好听的是个杂种了 
慢是相对的慢,没想象中慢,但有绝对的趋势的说,慢但如果想讨论具体细微到慢了哪点,那要看 php 在解释时 是怎么解释的,等有空把那 php 的源码看看(有点像讨论微分了) 
[/quote:b3d2932ca0]
类的概念是什么?
封装!
为什么要封装?
控制!
为了方便控制,我们将代码进行封装。简单说:归类。
如果你有耐心,用汇编也可以实现类的概念。那么类一定就慢么?
至于兼顾问题~~~~C++好象就是典型的过程、OO兼顾的吧?
[quote:b3d2932ca0="iamyess"]
不过,"小的程序一样可以有好的practice,能够根据客户的需求快速的变大才是最牛的应用" 这点我不否认,但问题是,等你想快速变大是,你还会在乎这一点点的效率,那只能说明你真是牛人了,把这一点点点点的时间都优化出来而且还能快速开发,那我无话可说 
[/quote:b3d2932ca0]

理论和实际的差距问题,没什么好说的。就事论事,不搞个人针对~~~
一点点的效率也许并不重要,但是从讨论中学到的也许不是一点点就能含盖~~

[quote:b3d2932ca0="iamyess"]
我还有个问题,想必阁下对 java 有不爽的感觉吧?(想想我为什么这么问) 
别人的疑问我也就不用再解释了,有空就 google 吧 
这次要说的 very well [/quote:b3d2932ca0]

我从来不会对任何编程语言感觉不爽~~
存在,就是理由!
C#、PHP、JAVA、ASP,能学的我都学~~能用的我都用~~~~所以我真想不出来为什么这么问。
GOOGLE永远不能取代讨论,直到计算机能够思考~~~~~

最后一句 very well,我还是不知道你在说什么好~~

longnetpro 回复于:2003-12-15 19:58:11 看来这个iamyess大多只懂个皮毛,只知道所以然,大多数却不知道所以然,而他这个所以然也不一定都对。不说别的,OO就一定比非OO慢?!这句话本身就是胡扯!JSP在后台是不是纯OO?它却绝对比PHP快!快慢不是形式决定的,而是机制和原理决定的。OO与非OO只是设计程序的一种模式,是逻辑结构而不是物理结构。还有什么对JAVA不爽,那是你不会写所以不爽!写大程序的时候用不用到OO的区别是很明显的,这位声称写过大工程的朋友竟然不知道。

个人感觉这个iamyess在无理取闹,讲又讲不出个具体的道理来,也不能使人信服,全凭自己感情用事,好象牛皮吹得还很大(真正的高手处事的态度就不会是这样的),而且口吐脏字,对这一点,谁都会觉得不爽。从语气上来看,这位朋友年龄也不会很大,经验也很缺乏,看来他要学的东西还有很多很多,首先要学的是如何为人处事。

iamyess 回复于:2003-12-15 20:27:14 longnetpro:

"OO就一定比非OO慢" 回去学几年语文再来和我讨论,ok ?

我已说过 "慢是相对的慢",当我这句是放屁啊?

我本来想告诉你 jsp 为什么快的,现在想知道吗?问我

没什么只是因为是 编译,内存,cache

关于为什么说笼统的说它慢,我想是我表达得不好还是你理解得不好
你想 一个事物处在低级方面,你使用起来固然要考虑诸多方面,这样就造成了繁琐,当然某些方面考虑得细致,也将产生优化,而 oo 是封装 低级事物的

我问会不会对 java 不爽,是因为 java 某些方面放弃了你们的 "绝对效率",而不是跟会不会 java 有没关系

还有某位仁兄跟我说设计模式,你要清楚一点,他们的观点在与 微观的 效率,设计模式呢?想想吧

还有位我不知怎么形容的, 我只不过提了 一个 c 语言或 汇编,根本不用顾及我在说什么,只因为我说了这几个关键字,他就千心万苦找出这篇文章来,实在佩服之致,要知道里面说的是些什么人,是些只会调用,然后苦于找 一些微小的 效率满足

tonera 回复于:2003-12-15 20:30:50 :D  :D  :D  :D  :D 楼上的看来相当冲动啊。

好了,就此罢兵!和为贵。

看到mikespook写的《程序优化杂谈——最优二叉树在程序中的应用》,相当浅显易懂,佩服啊。当老师的料。

iamyess 回复于:2003-12-15 20:46:30 补充一下:

我前面说的 C 和 汇编,不过是用他们有一点 “高和低“ 来理论的阐述一些问题,不要把这一点细致化了,因为我只用到了它门的某些关系来阐述我说的观点,如果你深入比较两者下去,那我说的将全都是屁了

还有,我说去google 不是说能取代,这点还不懂

前面有些帖,看文档就清楚的,知道了吗?

我不过是加了几句比较笼统的话,某些人说我是人身攻击

这个 longnetpro    还对我做了预测,感谢啊

关于观点问题,我认为 shukebeita  的那点值得讨论之外,其他好象没什么必要了

信服问题,还因为 某些人语文不行啊,这要研究一些抽象事务,我劝某些人还是不用学了,不要浪费一些时间,不止指这行,还有 一些科学研究等等,心理话

"至于兼顾问题~~~~C++好象就是典型的过程、OO兼顾的吧?"
想必这点是用来推翻,我对 C 语言的崇拜?我说过了吗?

还有必须跟 shukebeita  说一点,因为他们各有功能,细致得说 其他能实现的,php 也能,但扩大化了你会发现很多问题,语言无国界,我没对哪种语言有歧视观点,这开始时你可能就误解了,我只是在说明你们用一种观点来看是不对的而已

我再次说明老子语气臭,但至于搞个人针对,呵呵

mikespook 回复于:2003-12-15 22:35:06 晕了~~~~~我越看越和PHP的OO对不上了~~~~

to tonera:
本来是想写一个系列的,还有好多优化,这一直放下没写完~~~~
倒是想当老师,老师待遇多好啊~~可惜没人要~~~

大家还是回到正题吧~~~~

PHP的OOP~~~~继续~~~

shukebeita 回复于:2003-12-16 10:37:09 [quote:4ef8198c3c="iamyess"]补充一下:

我前面说的 C 和 汇编,不过是用他们有一点 “高和低“ 来理论的阐述一些问题,不要把这一点细致化了,因为我只用到了它门的某些关系来阐述我说的观点,如果你深入比较两者下去,那我说的将全都是屁了..........[/quote:4ef8198c3c]关于使用类是不是会比较慢,我想我已经表达了我的意见了,没有什么可以继续讨论的了。但是你的确表达得不好如果你能够采用这样的句式:我为什么说它慢,是因为~~,所以~~~,所以~~~,所以~~~,所以它比较慢。
而不是
[quote:4ef8198c3c]你想 一个事物处在低级方面,你使用起来固然要考虑诸多方面,这样就造成了繁琐,当然某些方面考虑得细致,也将产生优化,而 oo 是封装 低级事物的[/quote:4ef8198c3c]
你这样表达的确很具有迷惑性,让人怀疑你到底想不想把事情说清楚。

关于java放弃了我们的“绝对效率“,我就不知道从何说起,我重新看了一遍以前的贴子没找到所谓的“绝对效率“,所以不太明白你在说什么。

[quote:4ef8198c3c]但扩大化了你会发现很多问题[/quote:4ef8198c3c]
如果你认为有问题,可以把问题写出来问问大家呀。如果你说的有理,我们长知识,佩服崇拜你呀,对于应用php也会有所帮助。如果你的论点有问题,大家可以帮助你,这里的讨论才刚刚开始,欢迎你常来学习。

[quote:4ef8198c3c]我没对哪种语言有歧视观点[/quote:4ef8198c3c]
这个论坛是关于php所以大家基本上用php来说事,而不是java 或者是C++之类的。如果象你这样的态度这就好像你扎到一堆印第安人中吟两句唐诗然后说你们这些说鸟语的根本不懂这个境界。真不知道这种情形中到底谁的头脑有问题。当然会群起攻击了(当然也不排除这是你想要的结果)。当然,有的时候我也喜欢扮演坏人,  :lol:  这个就是Role play ,顺便问一句 SM 你有没有玩过。

iamyess 回复于:2003-12-16 11:02:18 理论的讨论会比较抽象的

不知道你对 低级事务和高端事务的关系理解

一个总是有实例证明的人太厉害了,还没到那个境界,你们要说出我理论的问题
才能继续跟我讨论下去

大家对 爱因斯坦 的相对论 感觉是放屁吧

iamyess 回复于:2003-12-16 11:39:58 这个论坛是关于php所以大家基本上用php来说事

我没说一定要别的语言,只是你对一种看法的理解

前面说的高和低的关系,有如:
C 和 汇编 的那点关系
要知道,前者是相对于后者 高级,但

为什么 汇编会快点,为什么 C 语言会依然存在,而汇编虽不至于消失(但也算冷落)

C 放弃了对繁琐处理,而且是人性化,相对开发高效的,牺牲那些效率没价值吗?

请理解好我的

"
一个事物处在低级方面,你使用起来固然要考虑诸多方面,这样就造成了繁琐,当然某些方面考虑得细致,也将产生优化,而 oo 是封装 低级事物的 
"

mikespook 回复于:2003-12-16 12:17:37 [quote:74dbcd7ec7="shukebeita"]
当然,有的时候我也喜欢扮演坏人,  这个就是Role play ,顺便问一句 SM 你有没有玩过。
[/quote:74dbcd7ec7]

The guy is a guy~~~haha~~~

越说越离谱了~~~~

to iamyess:
你到底是什么观点我能否做一个大胆猜测:

[quote:74dbcd7ec7]
1.牺牲执行效率来换取开发效率是一大进步。所以只要开发效率高,任何执行效率的牺牲都是值得的。

2.PHP本身虽然有OO特性,但是并不能改进其现象过程的本质。也就没有ASP.NET和serlet那样良好的开发模型。所以PHP不适合用于大型工程项目。

3.鉴于以上两点原因,我们在这里的讨论除了浪费我们自己的时间还浪费网络资源和带宽。所以有社会公害之嫌……[/quote:74dbcd7ec7]

我瞎猜的,不知道你的核心观点是什么。如果你希望这个讨论正常进行下去,那就摆明观点讲问题。如果不希望,那我们继续我们的讨论。而你,可以避而远之。OK?

然后我对我上面的猜想说一点我的看法:
[quote:74dbcd7ec7]
1.虽然编程语言经历了一代又一代的变迁。从机器码一直到现在还在试验中的自然语言描述。但是核心的思想没有变:运行更快,开发更快。有时我们会放弃运行效率选择开发效率,有时我们又会选择运行效率而放弃开发效率。这没有绝对的。所以汇编和JAVA共存。存在,就是理由。

2.PHP也许本质是一个面向过程的脚本语言,但它提供了OO特性。这样你可以在运行效率与开发效率之间更好的均衡。选择的空间更大。当然PHP的OO功能还很差,但是C++也不是一开始就这么强大。JAVA如果没有C++做基础,也不会有这么好的模式。所以不能一概而论的说。(而且实验表明封装的执行效率并不一定慢,当然也许不准确,可也是一个依据。)

3.我们在这里讨论的是我们爱好的,不论对错,不论是否符合实际。我们只是为了我们喜欢的东西,就像茶余饭后随便说说。除了我们自己,对谁也不会产生影响。我相信这里有很多有多年开发经验的老手,也有像我一样没什么经验的菜鸟。不过相互讨论就是这样,没有高低贵贱。我们可以措辞严厉的指出对方的错误。但是我们不可以因为错误而指责对方。因为人和人的经历并不一样,也许你觉得是很简单,很无趣的事情,在别人看来是一次很好的冒险也说不定。
[/quote:74dbcd7ec7]

综上所述,对于希望继续PHP的OO特性讨论的朋友请留下。对于感觉此事无聊的朋友,我有一个忠告:“萨达姆被活捉了,还是去SINA发表评论吧!”

嘿嘿~~~今天挺高兴,多说两句~~~我比较喜欢讨论的时候能明确知道对方的观点,特别是反方观点~~~不喜欢和人绕着地球跑~~~

shukebeita 回复于:2003-12-16 14:38:23 [quote:c40eb440c9="iamyess"]一个事物处在低级方面,你使用起来固然要考虑诸多方面,这样就造成了繁琐,当然某些方面考虑得细致,也将产生优化,而 oo 是封装 低级事物的 .[/quote:c40eb440c9]
我不是告诉你了吗,应当采用“因为~~所以~~~所以~~~所以~~~”这样的句式更容易表达你的意思,能够使你的伦点和论据更清晰。你的回答“请理解好我的“给人的感觉就好像你对于你自己说的话无能为力一样。

从来没有认为相对论是放屁,实际上我从来不会在论坛里写出什么“爱因斯坦”什么“相对论“倒是电影方世玉中雷老虎的话比较在理“以德服人,以德服人...”。

geel 回复于:2003-12-16 17:30:02 从现在硬件技术来说,已经不在乎那点效率损失了,如果客户要求绝对效率,那我们可以一点类都不用。

但是使用类的话,代码的维护性是不可比拟的。

更何况我们可以使用引用,这样效率只是花费在实例化上,至于说到寻址可能要多几次,我想不在乎那一点吧?应该是没有哪个程序是因为使用了类而效率低下。

如果ms追求绝对速度,他就不会发明dll了。用vc等开发的时候把那些函数弄进mfc中编译进代码岂不是更快。

至于序列化,我也没有用过,看大概意思是完全的保存一个变量吧,不好说。

还有session和cookie的问题,正常情况下,用session,只是发送给客户一个存储sessid的cookie,然后服务器段根据这个id来读取存储在session中的变量。而cookie,抛去网络带宽(不差那几百个字节),每个cookie都需要不停的在c-s之间传递,这样也引起了一些安全问题(例如同时监听并伪造cookie等),而且如何客户端不启用cookie,我们的程序实际就没有作用了。而session,既可以通过cookie,也可以通过url来传递sessid,基本不存在失效问题,真实数据都是保存在服务器上,安全上有一定的保障,带来的反面效应是效率问题。服务器需要获取cookie(或者url)中的sessid,然后读取session文件,然后分析,然后转成变量让我们利用。所以很难取舍。如果用https,当然就不会担心cookie泄漏,但我实在是不知道加密传输和处理session哪个更浪费资源。

个人观点

iamyess 回复于:2003-12-16 21:39:27 我还以为没人同意我的意见

longnetpro 回复于:2003-12-17 06:23:31 关于OO的效率问题,有必要确定一下,是否在任何情况下用OO一定比不用OO效率低——现在大家好象已定论这是肯定的,但我并不完全赞同这点。OO的效率之所以相对低,一般来说主要是低在编译这方面,却不一定低在运行时,即使象JAVA或是PHP这类伪编译语言也是如此。因为在编译时OO有继承与封装的特性,而面向过程的没有这些;另外,面向对象方式与过程调用方式起作用时在内存中的寻址方式是有一定的区别的。怎么说呢?还真不好表达出来。打一个不太恰当的比方,大家都知道用二叉树查找比顺序查找快(指多数情况下),但建立二叉树本身却有一定的开销,在运行时,这个开销引起的效率降低却被它查找的高效抵消并还有多的,那你能说顺序查找因为不用费力建二叉树因此效率高?

我认为这个事情不能一概而论,要具体问题具体分析,也不能绝对地说哪个效率更高。不过有一点基本可以肯定,即在做小工程的时候,用面向过程的方式简单直接,开发效率高,但后期维护不便,扩展性也相对较弱(不是绝对的,有的高手做得也相当得好);在做大工程的时候,用面向对象的方式逻辑流程清晰明了,开发效率高,后期维护性也比较好,扩展也相对容易(也不是绝对的,有的低手一样会做砸)。至于说到效率,小工程很有可能用面向过程的方式效率高,而对于大工程,用面向对象方式时,多数情况是:局部或是前期的效率降低却可换来整体或是后期的效率的较大提升。当然,还有人本身的因素在其中。

不知道大家明不明白我上面说的?——我的语文可是只有六十分的 :) 。

夜猫子 回复于:2003-12-17 10:18:29 第一部分我没发言权,我对这些编译啊什么的都不懂
但是第二部分我很赞同,不过也有一点不同的认识
>在做小工程的时候,用面向过程的方式简单直接,开发效率高
这个我基本持相反的看法,不过这也和每个人的经验有关,不一定谁对谁错,呵呵。
有人说,OO与其看做是一种技术,还不如说是一种信仰,我觉得这是对OO总结得最好的一句话。

geel 回复于:2003-12-17 16:30:21   其实对于类是否有效率,我感觉没有必要来讨论,这个应该是编译器的事情。比如c++中可以把函数明确为inline,编译器就知道该怎么做了。
  还有,我觉得 后期维护和执行效率 相比,作为开发人员个人情感上来说更向往前者。其实真的只是那么一点的效率损失。

不过我还是觉得无论大小工程,用类都很方便。对于我来说。

oo确实是一种信仰。

话又说回来,个人思想是:如果需要绝对速度,要考虑的是硬件升级、算法的改进、数据库优化等,而不是用不用类。

其实我以前写程序从来没有用过类,甚至认为用类更麻烦。但是现在用了之后才发现,好可爱啊!嗬嗬

iamyess 回复于:2003-12-17 17:07:22 是取决于编译器

但问题是  geel   说的

"源代码encode之后就是解释后的中间码了"

我估计我们是在两个层次的理解了

我想你的意思是:

oop 源程序 ,经过编译后,成中间代码
非 oop 源程序,经过编译后,成中间代码

而这中间代码 效率是一样的,所以他们是一样的吧?

如果他们是编译,那你是对的,可惜我一直想表达的就是 Zend Encoder 只是 

Encode 

而你所说的优化是 Zend Optimizer 做的事,而 php 经过 encode 没有优化过~~~

只是 保护了你的源码

Digico 回复于:2003-12-17 17:15:24 我也有个问题

现在我的平台现实大概是这样的

一个主程序,主要功能只是分检的作用,各种情况分检出来~以后 在该程序内调用各自的function函数及相因的类。

其中各function函数属一个小模块。以PHP文件分存着。

我不知道这样每个function分开着存一文件好。还是将大类的几个function组合好

哪个效率更高?

Digico 回复于:2003-12-17 17:21:02 ``` 我把每个模块都放在一张表里,

主程序在这表里的关键字段进行分析检索~  

好处~ 

在加新功能或模块时直接在表里进行配置就OK~主程序基本不用动/

``````

我觉得这也算一种蛮好的方安案~  
所以与大家探讨探险讨!~--~

NightKids 回复于:2003-12-17 17:24:03 根据我昨天在 php5 上面发现的错误:
写在一个文件里的函数 在文件调入的时候它并不会去管那些没有用到的函数。 它只会去分析那个用到的。

使用率很高的函数可以考虑放在一个文件里,每个页面加载一次就可以了/

geel 回复于:2003-12-17 17:36:55 我说不清楚意思,因为也不太了解。我的意思就是说zend encoder的作用就是把php代码解释成Optimizer 能认识的中间码,这样大家看不懂(encode之后是给optimizer看的),又不能修改,所以一举两得。Optimizer 我不太了解,估计也就是自动encoder之后cache一下。

至于encode oop和encode普通代码,是一样的。encoder只是encode成optimizer的代码,并不做优化(可能有少量优化?),optimizer看到这些代码之后再做优化。

做个比喻,大家应该多多少少用过vb。在他的开发环境里点运行,他编译成中间码,执行。这个过程就类似于 php明文源文件->编译成php或者zend产品(optimizer?)的中间代码->优化->php解释成机器码->执行,4步(php源文件不算一步,呵呵)
而当我们编译了vb程序成exe文件之后执行,就类似于(optimizer's or php's)中间码->优化->解释成机器码->执行,两步

这中间只是少了编译成中间码的步骤而已。

这些只是根据握看到的东西理解的,可能完全不正确

tonera 回复于:2003-12-17 18:26:10 [quote:179595a4c9="NightKids"]根据我昨天在 php5 上面发现的错误:
写在一个文件里的函数 在文件调入的时候它并不会去管那些没有用到的函数。 它只会去分析那个用到的。

使用率很高的函数可以考虑放在一个文件里,每个页面加载一次就可以了/[/quote:179595a4c9]

老大你怎么不早说?这么说来以后我可以把所有的函数和自定义的常量都放在一个文件里了?
:lol:

[b:179595a4c9]发完这贴才知道升级了!OK,全满![/b:179595a4c9]

geel 回复于:2003-12-17 18:36:46 我一直是这样做的
php爱 好者站 http://www.phpfans.net 文章|教程|下载|源码|论坛.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载