<commit_before>---
layout: post
title: 怎样写好一个类
category: PHP
tags: php,面向对象
keywords: php,面向对象
description: 
---

「代码大全」一书谈到了抽象数据模型（ADT）的概念，以PHP的角度来看，平常最常见的类就是抽象数据模型的表现形式，有人会说，类就是类，说得那么高端干嘛。

很多人对面向对象编程还处在懵懵懂懂的阶段，经常什么方法都塞在一个类中，举个例子，我们有个字体的类，代码如下：

        <?php
        class Font
        {
            public $style; // 字体样式
        
            public function getStyle()
            {
                // code ..
            }
        
            public function createDiv()
            {
                // code ..
            }
        
            public function insertFontToDiv()
            {
                // code ..
            }
        }


这个类中定义了公有的属性"style"，获取Style的方法和另外一些子方法，本来创建这个类是为了围绕「字体」作文章的，但在实现过程中，临时需求的增加使得这个类中多了Div和把字体插入到Div的方法，这是很常见的情况，而这只是个开始，与类无关的代码会越来越多，就像地上本无垃圾，有人丢了第一块垃圾，人们就会跟着丢垃圾一样，最后的结果就是这个类变得不易维护，可读性减低，导致这样的原因就是与类无关的代码破坏了这个类抽象的一致性。

另外这个类的style属性也有问题，它的类型是public，意味着外部可以随时调用改写，然后外部代码就有了

        $font = new Font;
        $font->style = 'font-size: 13px';


或者：

        $font = new Font;
        $font-style = 'font-weight: both';
<commit_msg>add files<commit_after>---
layout: post
title: 怎样写好一个类
category: PHP
tags: php,面向对象
keywords: php,面向对象
description: 
---

「代码大全」一书谈到了抽象数据模型（ADT）的概念，以PHP的角度来看，平常最常见的类就是抽象数据模型的表现形式，很多人对面向对象编程还处在懵懵懂懂的阶段，经常什么方法都塞在一个类中，举个例子，我们有个字体的类，代码如下：

        <?php
        class Font
        {
            public $style; // 字体样式
        
            public function getStyle()
            {
                // code ..
            }
        
            public function createDiv()
            {
                // code ..
            }
        
            public function insertFontToDiv()
            {
                // code ..
            }
        }


这个类中定义了公有的属性"style"，获取Style的方法和另外一些子方法，本来创建这个类是为了围绕「字体」作文章的，但在实现过程中，临时需求的增加使得这个类中多了Div和把字体插入到Div的方法，这是很常见的情况，而这只是个开始，与类无关的代码会越来越多，就像地上本无垃圾，有人丢了第一块垃圾，人们就会跟着丢垃圾一样，最后的结果就是这个类变得不易维护，可读性减低，导致这样的原因就是与类无关的代码破坏了这个类抽象的一致性。

另外这个类的style属性也有问题，它的类型是public，意味着外部可以随时调用改写，然后外部代码就有了

        $font = new Font;
        $font->style = 'font-size: 13px';


或者：

        $font = new Font;
        $font->style = 'font-weight: both';

{'fraction_non_alphanumeric': 0.10102899906454631, 'fraction_numerical': 0.0018709073900841909, 'mean_word_length': 1.9626038781163435, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 6, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6638096', 'n_tokens_mistral': 1193, 'n_tokens_neox': 1254, 'n_words': 94}