作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] 问题[壹]
时间Sun Jul 3 11:47:23 2011
※ 引述《justinj (黑旋风)》之铭言:
: 因为懒的编名字了....
: 1.一个未知的变数...可能是int,string,mixed,...
: 那我要加一个未知的变数
: 就要先判断这2个变数是否是同类型的....
: 除了if(objectp(var1)!=objectp(var2))
: if(intp(var1)!=intp(var2))
: .
: .
: 外有别的判断法吗?
一般未知的变数例如由 query 读回来的东西,都会用 mixed 宣告
来储存这个读回来的东西。
mixed var1=query("xxx1"), var2=query("xxx2");
要判断它们是否是相同的型态,一般则可以先 help objectp,然
後从相关索引去看有没有可用的函数。
参考:
mapp(3), stringp(3), pointerp(3), intp(3), bufferp(3),
floatp(3), functionp(3), nullp(3), undefinedp(3),
errorp(3)
然後就有两个没看过的,bufferp 与 errorp,不过这两个是无关
的。
那或许就可以写个 simul_efun 叫 varp 之类的,用来回传该变
数的型态,你也可以自己写。
int varp(mixed vars)
{
if(stringp(vars)) return 1;
else if(intp(vars)) return 2;
else if(arrayp(vars)) return 3;
else if(mapp(vars)) return 4;
else if(functionp(vars)) return 5;
else return -1;
}
这样只需做 if(varp(var1)==varp(var2)) 就代表它们是相同型
态的。
: 2.有在用
: call_other("档案A",({"函数",变数1,变数2,...}));
: 这时 变数1,变数2要符合函数才能正确执行...
: 那我要如何先判断有没有符合....
call_other 的语法是..
call_other(物件,"该物件内的某函数",参数1,参数2,参数3,...)
等同於
物件->该物件内的某函数(参数1,参数2,参数3,...)
另外你的问题有点怪,你都已经知道要呼叫的物件、跟他物件下
的函数了,那怎麽会不知道要传什麽参数过去呢?
然後换一种说法:如果你不知道要传什麽参数过去→代表你不知
道该物件下的函数是怎麽宣告的→那你就不应该(不被允许)去呼
叫该物件下的函数。
最简单的例子是假设 laechan 的家族系统,里面有个函数叫做..
mapping return_all_group_data(里面有一些参数)
{
return group_data;
}
假设你幸运地知道有这个函数,那或许我有对所接参数做一些限
制,使你无法成功取得 group_data.
这时除非「我告诉你」,或者我开放你 more,不然你是不会知道
的。
: 3.一个档案有时候有很多的函数
: 那判断档案A有无函数B....function_exists(B,A);
: 找指令C所使用的函数..用commands来找...
: 那如果我要知道档案A有什麽函数的话...
: 要怎麽写...[函数列表之类的...]
没有这种东西。
物件所储存的「资料」,跟物件所宣告的「方法」,如果你有权
限你自然可以读取、甚至可以撰写读取的方法。
但是基本上,物件所宣告的「方法」,也属於物件所保密的资讯
的一部份,就像你没办法知道一个函数里头到底宣告了哪些变数
是一样的道理。
Belldandy.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.253.165.208
1F:推 justinj :了解.....2主要是call指令的用法...amem 07/03 16:32