【问题标题】:PHP - What should I call the information stored in my Page class?PHP - 我应该怎样称呼存储在我的 Page 类中的信息?
【发布时间】:2008-12-18 00:37:40
【问题描述】:

我有一个名为 Page 的类,其私有属性当前称为 _pageData,它存储所有信息(例如标题、内容、关键字等)。

但是,当我提到它$this->_pageData 时,这对我来说并不那么好。我想想一个更好的名字,我想可能会有一个标准或“最佳实践”的名称/前缀/后缀来处理这类事情。我想到了“_assets”。

请问你过去使用了什么,一个明确的名称并没有让你走上正轨,向它添加一些数据,然后说“哦,不,现在我的数组中有数据超出了变量的名称”。这种情况发生在我身上好几次了,所以我想看看什么已经被证明是有效的。

【问题讨论】:

  • 我们更喜欢术语“stackheads”
  • 我认为官方术语是“堆垛机”,我在某处读到的一个 so-faq 标记的问题。
  • 你可能有 - 我可能错了

标签: php oop


【解决方案1】:
class Page {
    public $title = '';
    public $keywords = array();
    public $content = '';
    // etc.
}

$page = new Page();
echo '<title>' . $page->title . '</title>';
echo $page->content;

或者您可以使用 accessors/get-set 等来保护您的数据,允许通过持久性对其进行修改,或其他任何方式。这允许延迟初始化和延迟写入(不确定后者是否有合适的术语)。示例:

class Page {
    private $data = array('title' => '', 'keywords' => array(), 'content' => '');

    public __get($name) {
        if(isset($this->data[$name]))
            return $this->data[$name];

        /* You probably want to throw some sort of PHP error here. */
        return 'ERROR!';
    }
}

$page = new Page();
echo '<title>' . $page->title . '</title>';
echo $page->content;

(有关详细信息,请参阅overloading in the PHP5 manual。)

请注意,您可以隐藏 $data 成员,甚至可以修改它们或添加新成员(例如,$page->contentHTML 可以将 markdown 转换为 HTML)。

使用名称 _pageData 对于 Page 类是多余的。你已经知道它是一个页面,所以你在重复信息($currentPage->_pageData vs. $currentPage->data)。

我还发现关联数组对于这种事情有点混乱,但如果你想要一个真正动态的系统,它们可能是必需的。无论如何,您可以实现您的模板系统以通过名称 ($member = 'title'; echo $page-&gt;$member; // echoes $page-&gt;title) 访问类成员,假设这是您想要的数组(除了简单的数据库查询,您可以使用 list() )。

【讨论】:

  • 你说的更乱,是不是说数组包含的东西更容易丢失?
  • @alex,是的,语法看起来不太像 OO,也不太安全。此外,$page->title 比 $page->data['title'] 更短,并且更易于阅读(“Page's title”与“Page's data item 'title'”)。
  • 如果我要使用所有的getter来拉数据,使用数组会更容易接受吗?
  • @alex,你是什么意思,使用吸气剂? $page->getTile() 比 $page->data()['title'] 更干净(或者 PHP 不支持?然后: $data = $page->data(); $data['title'] )。您也可以使用 __get(我认为它被称为)并保留一个内部数组。
  • 我已经用一个使用 __get 的示例更新了我的帖子。希望这会有所帮助!
【解决方案2】:

这是非常具体的,我认为没有“标准”或“最佳做法”。随便叫它你认为最好的名字。在我自己的情况下,我会简单地称它为“数据”,因为 Page 是类,$this = Page,所以是 Page->Data。这对我来说就足够了。

我想不出更好的名字...也许因为您使用了 _ 前缀而听起来很奇怪?我不喜欢使用那些前缀,特别是在 PHP 中,它没有多大意义,但那只是我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多