callstar为什么解散PHP的call

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
__call只有两个参数吗?这个代码里面为什么传了好几个参数呢
这个怎么处理呢?我看有人这么说 __call 第一个参数$m 就是你要调用的方法 test.
这句话我都理解不了 第一个参数不是1吗?
class Caller
private $x = array(1, 2, 3);
public function __call($m, $a)
print "Method $m called:n";
var_dump($a);
return $this-&x;
$foo = new Caller();
$a = $foo-&test(1, "2", 3.4, true);
var_dump($a);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
__call是调用未定义的方法时调用的。
也就是说,你的test方法未定义,那么test这个方法名就会作为__call的第一个参数传入,而test的参数会被装进数组中作为__call的第二个参数传入。
所以当你调用$foo-&test(1, "2", 3.4, true)时,实际是相当于调用$foo-&__call('test', array(1, "2", 3.4, true))。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
__call方法在调用类的方法时触发,比如:
class google{
public function search(){
public function __call($method, $parameters){
//这里的method便是对应的方法,即"-&"后面的字符串,$parameters是通过这个方法传过来的参数
$google = new google();
$keyword = 'VR';
$google-&search($keyword);
//当调用当前对象不存在的方法时,会转向__call
$google-&operate();
利用__call可以做些封装,从而调用其它对象和方法。附官方参考:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
第一个参数就是你调用的不存在的方法的函数名,第二个就是你调用的不存在的方法时传的一对参数
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:34933人阅读
php(120)
php 5.3 后新增了 __call 与__callStatic 魔法方法。
__call 当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
__call($funcname, $arguments)
__callStatic($funcname, $arguments)
参数说明:
$funcname String 调用的方法名称。
$arguments Array 调用方法时所带的参数。
__call 例子
class Member{
protected $memberdata = array();
public function __call($func, $arguments){
list($type, $name) = explode('_', $func);
if(!in_array($type, array('set','get')) || $name==''){
return '';
switch($type){
case 'set':
$this-&memberdata[$name] = $arguments[0];
case 'get':
return isset($this-&memberdata[$name])? $this-&memberdata[$name] : '';
class User extends Member{
public function show(){
if($this-&memberdata){
foreach($this-&memberdata as $key=&$member){
echo $key.':'.$member.'&br&';
class Profession extends Member{
public function show(){
if($this-&memberdata){
foreach($this-&memberdata as $key=&$member){
echo $key.':'.$member.'&br&';
$userobj = new User();
$userobj-&set_name('fdipzone');
$userobj-&set_age(29);
$userobj-&show();
$probj = new Profession();
$probj-&set_profession('IT SERVICE');
$probj-&set_price(2500);
$probj-&show();
__callStatic例子
class Member{
protected static $memberdata = array();
public static function __callStatic($func, $arguments){
list($type, $name) = explode('_', $func);
if(!in_array($type, array('set','get')) || $name==''){
return '';
$feature = get_called_class();
switch($type){
case 'set':
self::$memberdata[$feature][$name] = $arguments[0];
case 'get':
return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : '';
class User extends Member{
public static function show(){
$feature = get_called_class();
if(self::$memberdata[$feature]){
foreach(self::$memberdata[$feature] as $key=&$member){
echo $key.':'.$member.'&br&';
class Profession extends Member{
public static function show(){
$feature = get_called_class();
if(self::$memberdata[$feature]){
foreach(self::$memberdata[$feature] as $key=&$member){
echo $key.':'.$member.'&br&';
User::set_name('fdipzone');
User::set_age(29);
User::show();
Profession::set_profession('IT SERVICE');
Profession::set_price(2500);
Profession::show();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
微信分享公众平台-破晓领域
微信号:fdipzone-idea
名称:破晓领域
访问:7086957次
积分:44611
积分:44611
排名:第79名
原创:286篇
转载:24篇
评论:459条
文章:31篇
阅读:625129
(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(3)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(6)(4)(5)(4)(6)(5)(6)(6)(6)(4)(8)(7)(6)(6)(6)(6)(7)(12)(7)(4)(7)(5)(4)(5)(3)(2)(4)(1)(1)(3)(1)(1)(2)(5)(1)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'}

我要回帖

更多关于 callstar为什么解散 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信