高段位php问题,高手接招:如何调用未知名称的类

2011-01-05 16:52:38 +08:00
 iloveyou
这种新建类的实例可以这样:
$className = '未知类名称';
$newClass = new $className;

但是如果是直接操作类本身呢?
$className = '未知类名称';
$className :: method(); //这行报错。

请问第二种怎么处理,除了用eval方法。
我现在在开发一个php mvc框架的ar部分需要用的这些。
5440 次点击
所在节点    问与答
35 条回复
lamengao
2011-01-05 17:11:48 +08:00
call_user_func
iloveyou
2011-01-05 17:28:52 +08:00
@lamengao 多谢了,我去看看这个函数
iloveyou
2011-01-05 17:45:30 +08:00
再追加一个问题:

刚你说的函数是调用类动作的,如果我想给一个未知名称的类中的一个公共静态变量赋值怎么办?

示例:
$className = '未知类名称';
$className :: parameter = 'test'; //这行报错。
fmfsaisai
2011-01-05 17:52:50 +08:00
$className :: method();
你确定这样会报错?PHP什么版本的?
以下代码可以运行PHP 5.3.3
<?php
class aa{
public static $var;
public static function a(){
echo self::$var;

}
}

$cc = 'aa';

$cc::$var = 123;
$cc::a();
iloveyou
2011-01-05 18:09:30 +08:00
@fmfsaisai 我用的是php-5.2.9-2,确实不行,后来我用了eval方法:

eval($class_name.'::$parameter = "xxx";');
fmfsaisai
2011-01-05 18:14:31 +08:00
@iloveyou
升级吧-_-
iloveyou
2011-01-05 18:16:52 +08:00
@fmfsaisai 看来你是php高手了,一下子就明白我的问题,还写出示例。我就是因为因为php水平遇到瓶颈才决定自己开发个框架练练,好多概念方法都不懂。不过目前还算顺利,控制器和视图部分基本完成了,现在正在弄model部分,这部分最麻烦。打算以后一直完善这个框架,等完善了就作为自己的主力开发框架。
iloveyou
2011-01-05 18:18:07 +08:00
好了,要下班了。改天聊,再次说声谢谢。
lamengao
2011-01-05 18:32:36 +08:00
@iloveyou 在PHP 5.3 中 $classname::$static_var 已经可以正常工作了。(注意静态变量前面的'$')
ayanamist
2011-01-05 18:54:29 +08:00
你可以去看看RefectionClass这个类的使用
summic
2011-01-05 19:05:19 +08:00
类反射全部搞定lz的需求
CupTools
2011-01-05 23:22:18 +08:00
顺便说句...用 PHP 5.2的同学写Daemon会抓狂的...内存直线上升。5.3才是王道

http://www.php.net/manual/en/features.gc.performance-considerations.php

我表示下面的图很有爱
ayanamist
2011-01-06 00:24:30 +08:00
@CupTools 你大概没有弄明白官方这个图是什么意思吧。写Daemon要自己做unset的,官方那个图代表5.3的垃圾收集更智能而已,在5.2中可以通过手工代码实现的
napoleonu
2011-01-06 00:30:54 +08:00
写网站,为什么不用C
liruqi
2011-01-06 01:37:15 +08:00
腾讯才用C
企鹅全家都用C
TheOnly92
2011-01-06 07:14:23 +08:00
写网站而已,为什么要用到 C?
summic
2011-01-06 09:22:36 +08:00
@napoleonu
写网站为什么不用汇编?
CupTools
2011-01-06 11:58:24 +08:00
@ayanamist 我确定一定以及肯定,我将全部变量重设了。我亲身做试验,在5.2下面,每完成一个while,5.2都会增加200kb内存;然后5.3维持在3.4M,100000个while也没有太大的内存变动。在5.2有gc_collect_cycles()?
napoleonu
2011-01-06 12:07:18 +08:00
@summic @TheOnly92 看起来酷啊
CupTools
2011-01-06 12:11:54 +08:00
@CupTools 并且,官方都说了,unset在某些情况下是没用的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/6766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX