• <day6>面向对象编程——修真宗门的"组织架构"

    修炼心法:面向对象的奥秘

    在修真世界中,宗门、门派、家族都有自己的组织架构和传承体系。而在 PHP 修炼中,面向对象编程(OOP)正是实现这种组织架构的核心技术。

    一、类与对象:宗门的蓝图与实例

    1. 类的定义:宗门的蓝图

    // 定义一个修真者类
    class Cultivator {
        // 属性:修真者的基本信息
        public $name;
        public $level;
        public $qi;
        
        // 方法:修真者的行为
        public function __construct($name, $level, $qi) {
            $this->name = $name;
            $this->level = $level;
            $this->qi = $qi;
        }
        
        public function cultivate() {
            $this->qi += 10;
            echo "{$this->name}正在修炼,气值+10,当前气值:{$this->qi}\n";
        }
        
        public function displayInfo() {
            echo "修真者:{$this->name}\n";
            echo "境界:{$this->level}\n";
            echo "气值:{$this->qi}\n";
        }
    }
    

    修真比喻:就像宗门的蓝图,定义了修真者的基本属性和行为。

    2. 对象的创建:宗门的实例

    // 创建修真者对象
    $cultivator1 = new Cultivator("清风道人", "金丹期", 100);
    $cultivator2 = new Cultivator("明月仙子", "元婴期", 200);
    
    // 使用对象的方法
    $cultivator1->cultivate();
    $cultivator1->displayInfo();
    
    $cultivator2->displayInfo();
    

    修真比喻:就像根据蓝图创建具体的修真者实例。

    二、封装:保护宗门的传承

    1. 访问修饰符

    class SecretArt {
        private $secret;  // 私有属性:只有宗门内部可见
        protected $technique;  // 受保护属性:宗门弟子可见
        public $name;  // 公共属性:所有人可见
        
        public function __construct($name, $technique, $secret) {
            $this->name = $name;
            $this->technique = $technique;
            $this->secret = $secret;
        }
        
        // 公共方法:展示功法信息
        public function showInfo() {
            echo "功法名称:{$this->name}\n";
            echo "修炼技巧:{$this->technique}\n";
            // 不能直接访问私有属性 $this->secret
        }
        
        // 私有方法:只有类内部可以调用
        private function getSecret() {
            return $this->secret;
        }
        
        // 公共方法:通过公共接口访问私有数据
        public function revealSecret() {
            return $this->getSecret();
        }
    }
    

    修真比喻:就像宗门的传承秘籍,有些内容只有核心弟子才能接触。

    三、继承:宗门的传承体系

    1. 基类与子类

    // 基类:修真者
    class Cultivator {
        public $name;
        public $level;
        
        public function __construct($name, $level) {
            $this->name = $name;
            $this->level = $level;
        }
        
        public function cultivate() {
            echo "{$this->name}正在修炼基础功法...\n";
        }
    }
    
    // 子类:剑修
    class SwordCultivator extends Cultivator {
        public $swordName;
        
        public function __construct($name, $level, $swordName) {
            parent::__construct($name, $level);
            $this->swordName = $swordName;
        }
        
        public function practiceSword() {
            echo "{$this->name}正在修炼{$this->swordName}剑法...\n";
        }
        
        // 重写父类方法
        public function cultivate() {
            parent::cultivate();
            echo "同时修炼剑道心法...\n";
        }
    }
    
    // 子类:法修
    class MagicCultivator extends Cultivator {
        public $spellName;
        
        public function __construct($name, $level, $spellName) {
            parent::__construct($name, $level);
            $this->spellName = $spellName;
        }
        
        public function castSpell() {
            echo "{$this->name}施展{$this->spellName}法术...\n";
        }
    }
    

    修真比喻:就像宗门的传承体系,弟子继承师父的功法并发展自己的特色。

    四、多态:万法归一

    1. 接口与实现

    // 接口:定义修真者的行为规范
    interface CultivationMethod {
        public function cultivate();
        public function displayInfo();
    }
    
    // 实现接口的类
    class QiCultivator implements CultivationMethod {
        public $name;
        
        public function __construct($name) {
            $this->name = $name;
        }
        
        public function cultivate() {
            echo "{$this->name}修炼气功,吐纳天地灵气...\n";
        }
        
        public function displayInfo() {
            echo "气功修真者:{$this->name}\n";
        }
    }
    
    class BodyCultivator implements CultivationMethod {
        public $name;
        
        public function __construct($name) {
            $this->name = $name;
        }
        
        public function cultivate() {
            echo "{$this->name}修炼体术,锤炼肉身...\n";
        }
        
        public function displayInfo() {
            echo "体修修真者:{$this->name}\n";
        }
    }
    

    修真比喻:就像不同的修真道路,但都遵循修真的基本法则。

    五、实战演练:修真宗门系统

    <?php
    // 修真宗门系统
    
    // 宗门类
    class Sect {
        private $name;
        private $members = [];
        
        public function __construct($name) {
            $this->name = $name;
        }
        
        public function recruit($cultivator) {
            $this->members[] = $cultivator;
            echo "欢迎 {$cultivator->name} 加入 {$this->name}!\n";
        }
        
        public function showMembers() {
            echo "=== {$this->name} 成员列表 ===\n";
            foreach ($this->members as $member) {
                $member->displayInfo();
                echo "---\n";
            }
        }
        
        public function groupCultivate() {
            echo "=== {$this->name} 集体修炼 ===\n";
            foreach ($this->members as $member) {
                $member->cultivate();
            }
        }
    }
    
    // 创建宗门
    $sect = new Sect("青云宗");
    
    // 创建修真者
    $cultivator1 = new SwordCultivator("清风道人", "金丹期", "青虹剑");
    $cultivator2 = new MagicCultivator("明月仙子", "元婴期", "冰霜术");
    $cultivator3 = new QiCultivator("玄天真人");
    
    // 加入宗门
    $sect->recruit($cultivator1);
    $sect->recruit($cultivator2);
    $sect->recruit($cultivator3);
    
    // 显示成员
    $sect->showMembers();
    
    // 集体修炼
    $sect->groupCultivate();
    
    // 个别修炼
    $cultivator1->practiceSword();
    $cultivator2->castSpell();
    ?>
    

    六、面向对象要点总结

    类与对象:

    • 类:对象的蓝图,定义属性和方法
    • 对象:类的实例,具有具体的数据和行为
    • 构造函数:对象创建时自动调用的方法

    封装:

    • public:公共属性/方法,所有地方都可访问
    • protected:受保护属性/方法,子类和本类可访问
    • private:私有属性/方法,只有本类可访问

    继承:

    • extends:子类继承父类的属性和方法
    • parent:::调用父类的方法
    • 重写:子类可以重写父类的方法

    多态:

    • 接口:定义行为规范,不实现具体逻辑
    • 实现:类实现接口,提供具体逻辑
    • 同一接口,不同实现

    七、今日修炼任务

    1. 创建一个Weapon武器类,包含名称、攻击力、耐久度属性
    2. 创建一个Cultivator修真者类,包含姓名、境界、气值属性
    3. 创建一个Sword剑类,继承自Weapon类,添加剑法技能
    4. 创建一个Sect宗门类,管理多个修真者
    5. 使用面向对象的方式模拟一场宗门大比

    记住:面向对象编程是PHP修炼中的"组织架构"之术,熟练掌握它们,你就能构建更复杂的修真系统!