0
0

More than 3 years have passed since last update.

PHPのmethod_existsとis_callableの挙動

Last updated at Posted at 2020-02-08

オブジェクト生成前


class TestClass
{
    public function publicMethod()
    {
        echo "public<br>\n";
    }
    protected function protectedMethod()
    {
        echo "protected<br>\n";
    }
    private function privateMethod()
    {
        echo "private<br>\n";
    }
    public static function publicStaticMethod()
    {
        echo "public static<br>\n";
    }
    protected static function protectedStaticMethod()
    {
        echo "protected static<br>\n";
    }
    private static function privateStaticMethod()
    {
        echo "private static<br>\n";
    }
}


var_dump( method_exists('TestClass', '__construct') );                  // false
var_dump( method_exists('TestClass', '__get') );                        // false
var_dump( method_exists('TestClass', 'publicMethod') );                 // true
var_dump( method_exists('TestClass', 'protectedMethod') );              // true
var_dump( method_exists('TestClass', 'privateMethod') );                // true
var_dump( method_exists('TestClass', 'publicStaticMethod') );           // true
var_dump( method_exists('TestClass', 'protectedStaticMethod') );        // true
var_dump( method_exists('TestClass', 'privateStaticMethod') );          // true

var_dump( is_callable(array('TestClass', '__construct')) );             // false
var_dump( is_callable(array('TestClass', '__get')) );                   // false
var_dump( is_callable(array('TestClass', 'publicMethod')) );            // true
var_dump( is_callable(array('TestClass', 'protectedMethod')) );         // false
var_dump( is_callable(array('TestClass', 'privateMethod')) );           // false
var_dump( is_callable(array('TestClass', 'publicStaticMethod')) );      // true
var_dump( is_callable(array('TestClass', 'protectedStaticMethod')) );   // false
var_dump( is_callable(array('TestClass', 'privateStaticMethod')) );     // false

オブジェクト生成後

$TestClass = new TestClass();

var_dump( method_exists($TestClass, '__construct') );                   // false
var_dump( method_exists($TestClass, '__get') );                         // false
var_dump( method_exists($TestClass, 'publicMethod') );                  // true
var_dump( method_exists($TestClass, 'protectedMethod') );               // true
var_dump( method_exists($TestClass, 'privateMethod') );                 // true
var_dump( method_exists($TestClass, 'publicStaticMethod') );            // true
var_dump( method_exists($TestClass, 'protectedStaticMethod') );         // true
var_dump( method_exists($TestClass, 'privateStaticMethod') );           // true

var_dump( is_callable(array($TestClass, '__construct')) );              // false
var_dump( is_callable(array($TestClass, '__get')) );                    // false
var_dump( is_callable(array($TestClass, 'publicMethod')) );             // true
var_dump( is_callable(array($TestClass, 'protectedMethod')) );          // false
var_dump( is_callable(array($TestClass, 'privateMethod')) );            // false
var_dump( is_callable(array($TestClass, 'publicStaticMethod')) );       // true
var_dump( is_callable(array($TestClass, 'protectedStaticMethod')) );    // false
var_dump( is_callable(array($TestClass, 'privateStaticMethod')) );      // false

クラスの継承

class TestChildClass extends TestClass
{
    public function __construct()
    {
        echo "__construct<br>\n";
    }
    public function __get($get)
    {
        echo "__get<br>\n";
    }
    public function check()
    {
        echo "</pre>\n<h2>子オブジェクト \$this</h2>\n<pre>";

        var_dump( method_exists($this, '__construct') );                    // true
        var_dump( method_exists($this, '__get') );                          // true
        var_dump( method_exists($this, 'publicMethod') );                   // true
        var_dump( method_exists($this, 'protectedMethod') );                // true
        var_dump( method_exists($this, 'privateMethod') );                  // true
        var_dump( method_exists($this, 'publicStaticMethod') );             // true
        var_dump( method_exists($this, 'protectedStaticMethod') );          // true
        var_dump( method_exists($this, 'privateStaticMethod') );            // true

        var_dump( is_callable(array($this, '__construct')) );               // true
        var_dump( is_callable(array($this, '__get')) );                     // true
        var_dump( is_callable(array($this, 'publicMethod')) );              // true
        var_dump( is_callable(array($this, 'protectedMethod')) );           // true
        var_dump( is_callable(array($this, 'privateMethod')) );             // false
        var_dump( is_callable(array($this, 'publicStaticMethod')) );        // true
        var_dump( is_callable(array($this, 'protectedStaticMethod')) );     // true
        var_dump( is_callable(array($this, 'privateStaticMethod')) );       // false

        echo "</pre>\n<h2>子オブジェクト self</h2>\n<pre>";

        var_dump( method_exists('self', '__construct') );                   // false
        var_dump( method_exists('self', '__get') );                         // false
        var_dump( method_exists('self', 'publicMethod') );                  // false
        var_dump( method_exists('self', 'protectedMethod') );               // false
        var_dump( method_exists('self', 'privateMethod') );                 // false
        var_dump( method_exists('self', 'publicStaticMethod') );            // false
        var_dump( method_exists('self', 'protectedStaticMethod') );         // false
        var_dump( method_exists('self', 'privateStaticMethod') );           // false

        var_dump( is_callable(array('self', '__construct')) );              // true
        var_dump( is_callable(array('self', '__get')) );                    // true
        var_dump( is_callable(array('self', 'publicMethod')) );             // true
        var_dump( is_callable(array('self', 'protectedMethod')) );          // true
        var_dump( is_callable(array('self', 'privateMethod')) );            // false
        var_dump( is_callable(array('self', 'publicStaticMethod')) );       // true
        var_dump( is_callable(array('self', 'protectedStaticMethod')) );    // true
        var_dump( is_callable(array('self', 'privateStaticMethod')) );      // false

        echo "</pre>\n<h2>子オブジェクト parent</h2>\n<pre>";

        var_dump( method_exists('parent', '__construct') );                 // false
        var_dump( method_exists('parent', '__get') );                       // false
        var_dump( method_exists('parent', 'publicMethod') );                // false
        var_dump( method_exists('parent', 'protectedMethod') );             // false
        var_dump( method_exists('parent', 'privateMethod') );               // false
        var_dump( method_exists('parent', 'publicStaticMethod') );          // false
        var_dump( method_exists('parent', 'protectedStaticMethod') );       // false
        var_dump( method_exists('parent', 'privateStaticMethod') );         // false

        var_dump( is_callable(array('parent', '__construct')) );            // false
        var_dump( is_callable(array('parent', '__get')) );                  // false
        var_dump( is_callable(array('parent', 'publicMethod')) );           // true
        var_dump( is_callable(array('parent', 'protectedMethod')) );        // true
        var_dump( is_callable(array('parent', 'privateMethod')) );          // false
        var_dump( is_callable(array('parent', 'publicStaticMethod')) );     // true
        var_dump( is_callable(array('parent', 'protectedStaticMethod')) );  // true
        var_dump( is_callable(array('parent', 'privateStaticMethod')) );    // false

        echo "</pre>\n<h2>子オブジェクト static</h2>\n<pre>";

        var_dump( method_exists('static', '__construct') );                 // false
        var_dump( method_exists('static', '__get') );                       // false
        var_dump( method_exists('static', 'publicMethod') );                // false
        var_dump( method_exists('static', 'protectedMethod') );             // false
        var_dump( method_exists('static', 'privateMethod') );               // false
        var_dump( method_exists('static', 'publicStaticMethod') );          // false
        var_dump( method_exists('static', 'protectedStaticMethod') );       // false
        var_dump( method_exists('static', 'privateStaticMethod') );         // false

        var_dump( is_callable(array('static', '__construct')) );            // true
        var_dump( is_callable(array('static', '__get')) );                  // true
        var_dump( is_callable(array('static', 'publicMethod')) );           // true
        var_dump( is_callable(array('static', 'protectedMethod')) );        // true
        var_dump( is_callable(array('static', 'privateMethod')) );          // false
        var_dump( is_callable(array('static', 'publicStaticMethod')) );     // true
        var_dump( is_callable(array('static', 'protectedStaticMethod')) );  // true
        var_dump( is_callable(array('static', 'privateStaticMethod')) );    // false
    }
}

echo "</pre>\n<h2>子オブジェクト生成前</h2>\n<pre>";

var_dump( method_exists('TestChildClass', '__construct') );                 // true
var_dump( method_exists('TestChildClass', '__get') );                       // true
var_dump( method_exists('TestChildClass', 'publicMethod') );                // true
var_dump( method_exists('TestChildClass', 'protectedMethod') );             // true
var_dump( method_exists('TestChildClass', 'privateMethod') );               // true
var_dump( method_exists('TestChildClass', 'publicStaticMethod') );          // true
var_dump( method_exists('TestChildClass', 'protectedStaticMethod') );       // true
var_dump( method_exists('TestChildClass', 'privateStaticMethod') );         // true

var_dump( is_callable(array('TestChildClass', '__construct')) );            // false
var_dump( is_callable(array('TestChildClass', '__get')) );                  // false
var_dump( is_callable(array('TestChildClass', 'publicMethod')) );           // true
var_dump( is_callable(array('TestChildClass', 'protectedMethod')) );        // false
var_dump( is_callable(array('TestChildClass', 'privateMethod')) );          // false
var_dump( is_callable(array('TestChildClass', 'publicStaticMethod')) );     // true
var_dump( is_callable(array('TestChildClass', 'protectedStaticMethod')) );  // false
var_dump( is_callable(array('TestChildClass', 'privateStaticMethod')) );    // false

echo "</pre>\n<h2>子オブジェクト生成後</h2>\n<pre>";

$TestChildClass = new TestChildClass();

var_dump( method_exists($TestChildClass, '__construct') );                  // true
var_dump( method_exists($TestChildClass, '__get') );                        // true
var_dump( method_exists($TestChildClass, 'publicMethod') );                 // true
var_dump( method_exists($TestChildClass, 'protectedMethod') );              // true
var_dump( method_exists($TestChildClass, 'privateMethod') );                // true
var_dump( method_exists($TestChildClass, 'publicStaticMethod') );           // true
var_dump( method_exists($TestChildClass, 'protectedStaticMethod') );        // true
var_dump( method_exists($TestChildClass, 'privateStaticMethod') );          // true

var_dump( is_callable(array($TestChildClass, '__construct')) );             // true
var_dump( is_callable(array($TestChildClass, '__get')) );                   // true
var_dump( is_callable(array($TestChildClass, 'publicMethod')) );            // true
var_dump( is_callable(array($TestChildClass, 'protectedMethod')) );         // false
var_dump( is_callable(array($TestChildClass, 'privateMethod')) );           // false
var_dump( is_callable(array($TestChildClass, 'publicStaticMethod')) );      // true
var_dump( is_callable(array($TestChildClass, 'protectedStaticMethod')) );   // false
var_dump( is_callable(array($TestChildClass, 'privateStaticMethod')) );     // false

$TestChildClass->check();

トレイトを使用した場合

trait FunctionTrait
{
    public function __construct()
    {
        echo "trait __construct<br>\n";
    }
    public function __get($get)
    {
        echo "trait __get<br>\n";
    }
    public function traitPublicMethod()
    {
        echo "trait public<br>\n";
    }
    protected function traitProtectedMethod()
    {
        echo "trait protected<br>\n";
    }
    private function traitPrivateMethod()
    {
        echo "trait private<br>\n";
    }
    public static function traitPublicStaticMethod()
    {
        echo "trait public static<br>\n";
    }
    protected static function traitProtectedStaticMethod()
    {
        echo "trait protected static<br>\n";
    }
    private static function traitPrivateStaticMethod()
    {
        echo "trait private static<br>\n";
    }

}

trait CheckTrait
{
    public function check()
    {
        echo "</pre>\n<h2>トレイト \$this</h2>\n<pre>";

        var_dump( method_exists($this, '__construct') );                    // true
        var_dump( method_exists($this, '__get') );                          // true
        var_dump( method_exists($this, 'publicMethod') );                   // true
        var_dump( method_exists($this, 'protectedMethod') );                // true
        var_dump( method_exists($this, 'privateMethod') );                  // true
        var_dump( method_exists($this, 'publicStaticMethod') );             // true
        var_dump( method_exists($this, 'protectedStaticMethod') );          // true
        var_dump( method_exists($this, 'privateStaticMethod') );            // true
        var_dump( method_exists($this, 'traitPublicMethod') );              // true
        var_dump( method_exists($this, 'traitProtectedMethod') );           // true
        var_dump( method_exists($this, 'traitPrivateMethod') );             // true
        var_dump( method_exists($this, 'traitPublicStaticMethod') );        // true
        var_dump( method_exists($this, 'traitProtectedStaticMethod') );     // true
        var_dump( method_exists($this, 'traitPrivateStaticMethod') );       // true

        var_dump( is_callable(array($this, '__construct')) );               // true
        var_dump( is_callable(array($this, '__get')) );                     // true
        var_dump( is_callable(array($this, 'publicMethod')) );              // true
        var_dump( is_callable(array($this, 'protectedMethod')) );           // true
        var_dump( is_callable(array($this, 'privateMethod')) );             // false
        var_dump( is_callable(array($this, 'publicStaticMethod')) );        // true
        var_dump( is_callable(array($this, 'protectedStaticMethod')) );     // true
        var_dump( is_callable(array($this, 'privateStaticMethod')) );       // false
        var_dump( is_callable(array($this, 'traitPublicMethod')) );         // true
        var_dump( is_callable(array($this, 'traitProtectedMethod')) );      // true
        var_dump( is_callable(array($this, 'traitPrivateMethod')) );        // true
        var_dump( is_callable(array($this, 'traitPublicStaticMethod')) );   // true
        var_dump( is_callable(array($this, 'traitProtectedStaticMethod')) );// true
        var_dump( is_callable(array($this, 'traitPrivateStaticMethod')) );  // true

        echo "</pre>\n<h2>トレイト self</h2>\n<pre>";

        var_dump( method_exists('self', '__construct') );                   // false
        var_dump( method_exists('self', '__get') );                         // false
        var_dump( method_exists('self', 'publicMethod') );                  // false
        var_dump( method_exists('self', 'protectedMethod') );               // false
        var_dump( method_exists('self', 'privateMethod') );                 // false
        var_dump( method_exists('self', 'publicStaticMethod') );            // false
        var_dump( method_exists('self', 'protectedStaticMethod') );         // false
        var_dump( method_exists('self', 'privateStaticMethod') );           // false
        var_dump( method_exists('self', 'traitPublicMethod') );             // false
        var_dump( method_exists('self', 'traitProtectedMethod') );          // false
        var_dump( method_exists('self', 'traitPrivateMethod') );            // false
        var_dump( method_exists('self', 'traitPublicStaticMethod') );       // false
        var_dump( method_exists('self', 'traitProtectedStaticMethod') );    // false
        var_dump( method_exists('self', 'traitPrivateStaticMethod') );      // false

        var_dump( is_callable(array('self', '__construct')) );                  // true
        var_dump( is_callable(array('self', '__get')) );                        // true
        var_dump( is_callable(array('self', 'publicMethod')) );                 // true
        var_dump( is_callable(array('self', 'protectedMethod')) );              // true
        var_dump( is_callable(array('self', 'privateMethod')) );                // false
        var_dump( is_callable(array('self', 'publicStaticMethod')) );           // true
        var_dump( is_callable(array('self', 'protectedStaticMethod')) );        // true
        var_dump( is_callable(array('self', 'privateStaticMethod')) );          // false
        var_dump( is_callable(array('self', 'traitPublicMethod')) );            // true
        var_dump( is_callable(array('self', 'traitProtectedMethod')) );         // true
        var_dump( is_callable(array('self', 'traitPrivateMethod')) );           // true
        var_dump( is_callable(array('self', 'traitPublicStaticMethod')) );      // true
        var_dump( is_callable(array('self', 'traitProtectedStaticMethod')) );   // true
        var_dump( is_callable(array('self', 'traitPrivateStaticMethod')) );     // true

        echo "</pre>\n<h2>トレイト parent</h2>\n<pre>";

        var_dump( method_exists('parent', '__construct') );                     // false
        var_dump( method_exists('parent', '__get') );                           // false
        var_dump( method_exists('parent', 'publicMethod') );                    // false
        var_dump( method_exists('parent', 'protectedMethod') );                 // false
        var_dump( method_exists('parent', 'privateMethod') );                   // false
        var_dump( method_exists('parent', 'publicStaticMethod') );              // false
        var_dump( method_exists('parent', 'protectedStaticMethod') );           // false
        var_dump( method_exists('parent', 'privateStaticMethod') );             // false
        var_dump( method_exists('parent', 'traitPublicMethod') );               // false
        var_dump( method_exists('parent', 'traitProtectedMethod') );            // false
        var_dump( method_exists('parent', 'traitPrivateMethod') );              // false
        var_dump( method_exists('parent', 'traitPublicStaticMethod') );         // false
        var_dump( method_exists('parent', 'traitProtectedStaticMethod') );      // false
        var_dump( method_exists('parent', 'traitPrivateStaticMethod') );        // false

        var_dump( is_callable(array('parent', '__construct')) );                // false
        var_dump( is_callable(array('parent', '__get')) );                      // false
        var_dump( is_callable(array('parent', 'publicMethod')) );               // true
        var_dump( is_callable(array('parent', 'protectedMethod')) );            // true
        var_dump( is_callable(array('parent', 'privateMethod')) );              // false
        var_dump( is_callable(array('parent', 'publicStaticMethod')) );         // true
        var_dump( is_callable(array('parent', 'protectedStaticMethod')) );      // true
        var_dump( is_callable(array('parent', 'privateStaticMethod')) );        // false
        var_dump( is_callable(array('parent', 'traitPublicMethod')) );          // false
        var_dump( is_callable(array('parent', 'traitProtectedMethod')) );       // false
        var_dump( is_callable(array('parent', 'traitPrivateMethod')) );         // false
        var_dump( is_callable(array('parent', 'traitPublicStaticMethod')) );    // false
        var_dump( is_callable(array('parent', 'traitProtectedStaticMethod')) ); // false
        var_dump( is_callable(array('parent', 'traitPrivateStaticMethod')) );   // false

        echo "</pre>\n<h2>トレイト static</h2>\n<pre>";

        var_dump( method_exists('static', '__construct') );                     // false
        var_dump( method_exists('static', '__get') );                           // false
        var_dump( method_exists('static', 'publicMethod') );                    // false
        var_dump( method_exists('static', 'protectedMethod') );                 // false
        var_dump( method_exists('static', 'privateMethod') );                   // false
        var_dump( method_exists('static', 'publicStaticMethod') );              // false
        var_dump( method_exists('static', 'protectedStaticMethod') );           // false
        var_dump( method_exists('static', 'privateStaticMethod') );             // false
        var_dump( method_exists('static', 'traitPublicMethod') );               // false
        var_dump( method_exists('static', 'traitProtectedMethod') );            // false
        var_dump( method_exists('static', 'traitPrivateMethod') );              // false
        var_dump( method_exists('static', 'traitPublicStaticMethod') );         // false
        var_dump( method_exists('static', 'traitProtectedStaticMethod') );      // false
        var_dump( method_exists('static', 'traitPrivateStaticMethod') );        // false

        var_dump( is_callable(array('static', '__construct')) );                // true
        var_dump( is_callable(array('static', '__get')) );                      // true
        var_dump( is_callable(array('static', 'publicMethod')) );               // true
        var_dump( is_callable(array('static', 'protectedMethod')) );            // true
        var_dump( is_callable(array('static', 'privateMethod')) );              // false
        var_dump( is_callable(array('static', 'publicStaticMethod')) );         // true
        var_dump( is_callable(array('static', 'protectedStaticMethod')) );      // true
        var_dump( is_callable(array('static', 'privateStaticMethod')) );        // false
        var_dump( is_callable(array('static', 'traitPublicMethod')) );          // true
        var_dump( is_callable(array('static', 'traitProtectedMethod')) );       // true
        var_dump( is_callable(array('static', 'traitPrivateMethod')) );         // true
        var_dump( is_callable(array('static', 'traitPublicStaticMethod')) );    // true
        var_dump( is_callable(array('static', 'traitProtectedStaticMethod')) ); // true
        var_dump( is_callable(array('static', 'traitPrivateStaticMethod')) );   // true
    }
}

class TestChildWithTraitClass extends TestClass
{
    use FunctionTrait;
    use CheckTrait;
}

echo "</pre>\n<h2>トレイト付き子オブジェクト生成前</h2>\n<pre>";

var_dump( method_exists('TestChildWithTraitClass', '__construct') );                    // true
var_dump( method_exists('TestChildWithTraitClass', '__get') );                          // true
var_dump( method_exists('TestChildWithTraitClass', 'publicMethod') );                   // true
var_dump( method_exists('TestChildWithTraitClass', 'protectedMethod') );                // true
var_dump( method_exists('TestChildWithTraitClass', 'privateMethod') );                  // true
var_dump( method_exists('TestChildWithTraitClass', 'publicStaticMethod') );             // true
var_dump( method_exists('TestChildWithTraitClass', 'protectedStaticMethod') );          // true
var_dump( method_exists('TestChildWithTraitClass', 'privateStaticMethod') );            // true
var_dump( method_exists('TestChildWithTraitClass', 'traitPublicMethod') );              // true
var_dump( method_exists('TestChildWithTraitClass', 'traitProtectedMethod') );           // true
var_dump( method_exists('TestChildWithTraitClass', 'traitPrivateMethod') );             // true
var_dump( method_exists('TestChildWithTraitClass', 'traitPublicStaticMethod') );        // true
var_dump( method_exists('TestChildWithTraitClass', 'traitProtectedStaticMethod') );     // true
var_dump( method_exists('TestChildWithTraitClass', 'traitPrivateStaticMethod') );       // true

var_dump( is_callable(array('TestChildWithTraitClass', '__construct')) );               // false
var_dump( is_callable(array('TestChildWithTraitClass', '__get')) );                     // false
var_dump( is_callable(array('TestChildWithTraitClass', 'publicMethod')) );              // true
var_dump( is_callable(array('TestChildWithTraitClass', 'protectedMethod')) );           // false
var_dump( is_callable(array('TestChildWithTraitClass', 'privateMethod')) );             // false
var_dump( is_callable(array('TestChildWithTraitClass', 'publicStaticMethod')) );        // true
var_dump( is_callable(array('TestChildWithTraitClass', 'protectedStaticMethod')) );     // false
var_dump( is_callable(array('TestChildWithTraitClass', 'privateStaticMethod')) );       // false
var_dump( is_callable(array('TestChildWithTraitClass', 'traitPublicMethod')) );         // true
var_dump( is_callable(array('TestChildWithTraitClass', 'traitProtectedMethod')) );      // false
var_dump( is_callable(array('TestChildWithTraitClass', 'traitPrivateMethod')) );        // false
var_dump( is_callable(array('TestChildWithTraitClass', 'traitPublicStaticMethod')) );   // true
var_dump( is_callable(array('TestChildWithTraitClass', 'traitProtectedStaticMethod')) );// false
var_dump( is_callable(array('TestChildWithTraitClass', 'traitPrivateStaticMethod')) );  // false

echo "</pre>\n<h2>トレイト付き子オブジェクト生成後</h2>\n<pre>";

$TestChildWithTraitClass = new TestChildWithTraitClass();

var_dump( method_exists($TestChildWithTraitClass, '__construct') );                     // true
var_dump( method_exists($TestChildWithTraitClass, '__get') );                           // true
var_dump( method_exists($TestChildWithTraitClass, 'publicMethod') );                    // true
var_dump( method_exists($TestChildWithTraitClass, 'protectedMethod') );                 // true
var_dump( method_exists($TestChildWithTraitClass, 'privateMethod') );                   // true
var_dump( method_exists($TestChildWithTraitClass, 'publicStaticMethod') );              // true
var_dump( method_exists($TestChildWithTraitClass, 'protectedStaticMethod') );           // true
var_dump( method_exists($TestChildWithTraitClass, 'privateStaticMethod') );             // true
var_dump( method_exists($TestChildWithTraitClass, 'traitPublicMethod') );               // true
var_dump( method_exists($TestChildWithTraitClass, 'traitProtectedMethod') );            // true
var_dump( method_exists($TestChildWithTraitClass, 'traitPrivateMethod') );              // true
var_dump( method_exists($TestChildWithTraitClass, 'traitPublicStaticMethod') );         // true
var_dump( method_exists($TestChildWithTraitClass, 'traitProtectedStaticMethod') );      // true
var_dump( method_exists($TestChildWithTraitClass, 'traitPrivateStaticMethod') );        // true

var_dump( is_callable(array($TestChildWithTraitClass, '__construct')) );                // true
var_dump( is_callable(array($TestChildWithTraitClass, '__get')) );                      // true
var_dump( is_callable(array($TestChildWithTraitClass, 'publicMethod')) );               // true
var_dump( is_callable(array($TestChildWithTraitClass, 'protectedMethod')) );            // false
var_dump( is_callable(array($TestChildWithTraitClass, 'privateMethod')) );              // false
var_dump( is_callable(array($TestChildWithTraitClass, 'publicStaticMethod')) );         // true
var_dump( is_callable(array($TestChildWithTraitClass, 'protectedStaticMethod')) );      // false
var_dump( is_callable(array($TestChildWithTraitClass, 'privateStaticMethod')) );        // false
var_dump( is_callable(array($TestChildWithTraitClass, 'traitPublicMethod')) );          // true
var_dump( is_callable(array($TestChildWithTraitClass, 'traitProtectedMethod')) );       // false
var_dump( is_callable(array($TestChildWithTraitClass, 'traitPrivateMethod')) );         // false
var_dump( is_callable(array($TestChildWithTraitClass, 'traitPublicStaticMethod')) );    // true
var_dump( is_callable(array($TestChildWithTraitClass, 'traitProtectedStaticMethod')) ); // false
var_dump( is_callable(array($TestChildWithTraitClass, 'traitPrivateStaticMethod')) );   // false

$TestChildWithTraitClass->check();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0