Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何";隐藏“;PHP类中的私有变量_Php_Class - Fatal编程技术网

如何";隐藏“;PHP类中的私有变量

如何";隐藏“;PHP类中的私有变量,php,class,Php,Class,我可能不太了解这一点,但因为“username”变量是私有的。这不应该是回报的一部分吗?我如何使$username是私有的而不是输出的,而public成员是私有的 注意:永远不要使用var\u dump呈现类,除非是为了调试 尽管这不是私有范围的目的,但有趣的是,您可以使用echo json\u encode($object)和类中的私有变量将不会输出。然后,您可以在API中安全地使用此JSON class MyClass { private $username = "api";

我可能不太了解这一点,但因为“username”变量是私有的。这不应该是回报的一部分吗?我如何使$username是私有的而不是输出的,而public成员是私有的

注意:永远不要使用
var\u dump
呈现类,除非是为了调试

尽管这不是私有范围的目的,但有趣的是,您可以使用
echo json\u encode($object)和类中的私有变量将不会输出。然后,您可以在API中安全地使用此JSON

class MyClass 
{
    private $username = "api";


    public function create_issue()
    {
        $this->public = "Joe";
        return $this;
    }

}

$test = new MyClass();
$test->create_issue();

echo json_encode($test); // prints {"public":"Joe"}

我理解你的担忧。首先,让我讨论变量范围private。 私有变量在当前类中是私有的。如果在另一个类中使用该类,则私有变量将不起作用。因此,您必须使用另一个类来保护您的private变量

<?php

class MyClassProtected 
{
    private $username = "api";
    public function doSomething(){   
    // write code using private variable
   }

}


class MyClass
{   
    public function create_issue()

    {
       $test = new MyClassProtected();
       $test -> doSomething();
       return $this->public = "Joe";
    }
}


$test = new MyClass();
$test->create_issue();
var_dump($test);

?>



您是否尝试访问它?为了避免输出它,请不要使用
var\u dump
。这东西只是吐出所有信息,它可以和应该用于调试或记录。另外,您不能直接访问私有属性,所以请尝试这样做,就像其他人建议的那样。私有意味着其他类/外部代码无法访问该变量,但它仍然可以完全访问同一类中的任何内容。仅仅因为var_dump可以吐出来并不意味着它是可访问的。var_dump用于调试目的,它必须从它所传递的任何内容中转储它可以转储的所有内容,包括私有内容。我喜欢这个问题。var_dump是一个访问类外部私有成员的函数。如果您正在构建一个API,例如,那么您的代码将暴露一个安全漏洞。欢迎使用StackOverflow!请详细说明您的答案,并添加一些对该代码的简要解释,以及为什么它比其他答案更好。这种方法在课堂上使用。欢迎使用SO@丹尼斯·谢里梅特是对的。实时链接可能会消失,而代码只是一个不完整的答案,因为你应该公开你的优点以及它是如何工作的。谢谢,我会这么做的。
<?php

class MyClassProtected 
{
    private $username = "api";
    public function doSomething(){   
    // write code using private variable
   }

}


class MyClass
{   
    public function create_issue()

    {
       $test = new MyClassProtected();
       $test -> doSomething();
       return $this->public = "Joe";
    }
}


$test = new MyClass();
$test->create_issue();
var_dump($test);

?>
<?php class Demo {
private $string_var='yes';
protected $int_var=50000;
public $float_var=12.000;

public function __debugInfo() 
{
    return [
        'propString' => $this->string_var.'No',
    ];
} } var_dump(new Demo());    ?>