你们有试过PHP里面的call_user_func_array()能调私有方法吗?

开元中国2015 发布于 2015/07/10 11:22
阅读 1K+
收藏 1
PHP

你们有试过PHP里面的call_user_func_array()能调私有方法吗?

不知有大神遇到过没,能解释下么

加载中
1
朱__朱
朱__朱
要是能调,就不叫私有方法了
0
开源小姐
开源小姐

能不能试一下咯。

据我所知,不能。

0
0
酒逍遥
酒逍遥
肯定不能
0
hongmajia
hongmajia
<?php
class Foo {
  private function myPrivateMethod() {
    return 7;
  }
}

$method = new ReflectionMethod('Foo', 'myPrivateMethod');
$method->setAccessible(true);

echo call_user_func_array(array($method, 'invoke'), array(new Foo));

echo $method->invoke(new Foo);

做下反射,还是只能做到的

0
mickelfeng
mickelfeng
<?php
class Test{
    private function a($str){
        print $str."a---ok";
    }
    public function b($str){
        print $str."b---ok";
    }
    protected function c($str){
        print $str."c---ok";
    }
}


$obj=new Test();


call_user_func_array(array($obj,'b'), array("testing"));
call_user_func_array(array($obj,'c'), array("testing"));
call_user_func_array(array($obj,'a'), array("testing"));
testingb---ok
Warning: call_user_func_array() expects parameter 1 to be a valid callback, cannot access protected method Test::c() in /Users/Developer/php/a.php on line 17

Warning: call_user_func_array() expects parameter 1 to be a valid callback, cannot access private method Test::a() in /Users/Developer/php/a.php on line 18

0
开元中国2015
开元中国2015
<?php

class Test {

    public function __call($strName, $arrParams) {
        $strTrueName = '_'.$strName;
        return call_user_func_array(array($this, $strTrueName), $arrParams);
    }

    private function _getInfo() {
        return '私有方法';
    }
}

$t = new Test();
var_dump($t->getInfo())



返回顶部
顶部