【问题标题】:PHP Moving Custom Json Encode/Decode to Abstract ClassPHP 将自定义 Json 编码/解码移动到抽象类
【发布时间】:2012-02-09 12:04:28
【问题描述】:

我开始学习 PHP 并且拥有不错的 Java 背景。我遇到了以下 PHP 语言的编码挑战:

我希望能够以 JSON 格式对我的 PHP 类进行编码/解码。我已经为类私有属性创建了利用 getter/setter 方法的 PHP 类。这导致本机 json_encode 方法在编码期间跳过这些属性。我找到了以下脚本,它获取私有属性并将它们格式化为 JSON 字符串:

<?php
public function encodeJSON()
{
    foreach ($this as $key => $value)
    {
        $json->$key = $value;
    }
    return json_encode($json);
}
public function decodeJSON($json_str)
{
    $json = json_decode($json_str, 1);
    foreach ($json as $key => $value)
    {
        $this->$key = $value;
    }
}
?>

我研究了这段代码并意识到它是如何生成字符串和对象的。现在我想将此代码推送到一个抽象类中,以便我可以扩展该类并接收此功能。

问题是我无法从抽象类引用具体类中的私有属性。我对 Java 的了解告诉我,如果不指定抽象方法并强制每个具体类实现它,我可能无法做到这一点。我尝试了几次尝试在 PHP 中使用反射并将具体类传递给抽象类的构造函数。谁能指出我正确的方向,或者告诉我这是否不可能?

【问题讨论】:

  • 它是否适用于protected? (私有变量的概念是不能在交付的类中看到它们,所以这是正确的行为)
  • @Vyktor 是的。我太专注于学习新东西,以至于忘记了我的基本编程基础。谢谢你把它捡起来。如果您将其发布为答案,我会接受。

标签: php json


【解决方案1】:

private variables 的概念是不能在交付的类中看到它们,因此这是正确的行为。

如果您改用protected,您的概念应该可以正常工作。

【讨论】:

猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多