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