簡體   English   中英

如何驗證屬性是否可以在PHP中訪問?

[英]How do you validate if a property is accessible in php?

對於包含私有屬性的類,property_exists()函數返回true(php> 5.3)。 對於函數,有一個is_callable方法,它不僅確認方法存在,而且還可用(作為method_exists()的替代方法)。 是否存在與此函數等效的對應項,以確認此屬性是否可訪問?

<?php

class testClass {

    private $locked;

    public $unlocked;

    private function hiddenFunction(){
        return "hidden";
    }

    public function visibleFunction(){
        return "visible";
    }

}

$object = new testClass();

var_dump(property_exists($object, "unlocked")); // returns true
var_dump(property_exists($object, "locked")); // returns true > php 5.3

var_dump(method_exists($object, "hiddenFunction")); // returns true but can't be called
var_dump(method_exists($object, "visibleFunction")); // returns true

var_dump(is_callable(array($object, "hiddenFunction"))); // returns false
var_dump(is_callable(array($object, "visibleFunction"))); // returns true

?> 

您可以使用Reflection類taht將允許您對類,接口,函數,方法和擴展進行反向工程

例如,要獲取類的所有公共屬性,您可以執行以下操作:

$reflectionObject    = new ReflectionObject($object);
$testClassProperties = $reflectionObject->getProperties(ReflectionProperty::IS_PUBLIC);
print_r ($testClassProperties);

OUTPUT

Array
(
    [0] => ReflectionProperty Object
        (
            [name] => unlocked
            [class] => testClass
        )

)

要獲取類的所有公共方法,您可以執行以下操作:

$reflectionObject    = new ReflectionObject($object);
$testClassProperties = $reflectionObject->getMethods(ReflectionProperty::IS_PUBLIC);
print_r ($testClassProperties);

OUTPUT

Array
(
    [0] => ReflectionMethod Object
        (
            [name] => visibleFunction
            [class] => testClass
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM