免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: a_coder
打印 上一主题 下一主题

请教一个关于参数传递的问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-10-23 13:50 |只看该作者
原帖由 dz902 于 2007-10-23 13:33 发表


我不懂你的意思。constructor 可以有默认参数,init 也可以。

constructor = 至少 2 种情况 (有参,无参)
constructor + init = 至少 4 种情况 (con 有参 init 有参,con 有参 init 无参,con 无参 ini ...


例子:
<?php

&nbsp;&nbsp;&nbsp;&nbsp;class a
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public function __construct()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arguments = get_func_args();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call_user_func_array( array(&$this, 'init'), $arguments);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public function init( $a, $b )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $a.$b;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;}


&nbsp;&nbsp;&nbsp;&nbsp;function load()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inst = new a;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$args = get_func_args();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call_user_func_array( array(&$inst, 'init'), $args );
&nbsp;&nbsp;&nbsp;&nbsp;}


?>

论坛徽章:
0
22 [报告]
发表于 2007-10-23 13:51 |只看该作者
说了半天不就是想new的时候自动初始话一下嘛,要知道__construct也是一个函数:


  1. <?php

  2.     class Object {
  3.         function __construct( ) {
  4.             $numargs = func_num_args();
  5.             echo "Number of arguments: $numargs<br />\n";
  6.             if ($numargs >= 2) {
  7.                 echo "Second argument is: " . func_get_arg(1) . "<br />\n";
  8.             }
  9.             $arg_list = func_get_args();
  10.             for ($i = 0; $i < $numargs; $i++) {
  11.                 echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
  12.             }
  13.                 }
  14.     }

  15.     $o = new Object(1, 2, 3) ;

  16. ?>
复制代码

论坛徽章:
0
23 [报告]
发表于 2007-10-23 13:51 |只看该作者
上面的代码是有问题的。但是如果,你在construct地方加上一个参数数量判断,如果是0个,不执行init,这样就不太合理。不能保证没有参数就没有init阿。毕竟init是一个构造函数的作用

论坛徽章:
0
24 [报告]
发表于 2007-10-23 13:53 |只看该作者
原帖由 danssion 于 2007-10-23 13:49 发表
我觉得那是重载

楼猪   给个你的定义?



我在何处,重载了何物?

论坛徽章:
0
25 [报告]
发表于 2007-10-23 13:56 |只看该作者
我21楼的代码有问题?

论坛徽章:
0
26 [报告]
发表于 2007-10-23 13:56 |只看该作者
原帖由 achieverain 于 2007-10-23 13:43 发表
看来有悬赏的帖子回答就是踊跃.我也凑凑热闹

LZ可以看看PHP实现  工厂模式  



这里是我的一段正在运行中的代码



class fu
{
.............



    function build($class_name,$param=nul ...



我在考虑的这个东西的原型,是想做一个可以重用的单例外壳,不需要要做单例的类进行特殊处理,只需要通过一个特定的方法即可,而且也不要影响通过 new 句柄来实例化这个类。类要派生于一个基础类 obj,便于做一些全局的宏观处理,比如在日志中记录被实例化的具体的类及其个数,还有实例化以后的结果等等。

论坛徽章:
0
27 [报告]
发表于 2007-10-23 13:58 |只看该作者
原帖由 sunnyfun 于 2007-10-23 13:56 发表
我21楼的代码有问题?



sorry,隔楼了,我说的是我引入的那段代码有问题,上面看一下就有

论坛徽章:
0
28 [报告]
发表于 2007-10-23 14:00 |只看该作者
原帖由 sunnyfun 于 2007-10-23 13:51 发表
说了半天不就是想new的时候自动初始话一下嘛,要知道__construct也是一个函数:






建议你不要再乱作回答。请麻烦仔细阅读每一层楼的代码及说明。

不要再在我的面前摆出一幅自以为是的自傲姿态,不然我会忍不住骂人的。这贴不欢迎你参与,请离开,谢谢。

[ 本帖最后由 a_coder 于 2007-10-23 14:10 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2007-10-23 15:54 |只看该作者
等下测试一下运行速度。

论坛徽章:
0
30 [报告]
发表于 2007-10-23 16:27 |只看该作者
我前面说的解决办法实现:加一个参数 $auto_init。

#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// PHP CODE Highliting for CU by dZ902


<?
function __construct($auto_init = FALSE, ...)
{
   
// ...
   
if ($auto_init == TRUE) {
        
call_user_func_array( array(&$this, 'init'), $args);
        return;
    } else {
        
// do construction
   
}
}
?>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP