オブジェクト生成前
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();