以下是一些常见的 PHP 面向对象笔试题及解析: 题目 1:类的定义和实例化 ```php <?php // 定义一个名为 Person 的类 class Person { // 定义一个公共属性 name public $name; // 定义一个构造函数,用于初始化 name 属性 public function __construct($name) { $this->name = $name; } // 定义一个公共方法 sayHello,用于输出问候语 public function sayHello() { echo "Hello, my name is " . $this->name . ".\n"; } } // 实例化 Person 类,创建一个对象 $person $person = new Person("John"); // 调用对象的 sayHello 方法 $person->sayHello(); ?> ``` 问题:请解释上述代码的功能,并说明 `__construct` 方法的作用。 答案:这段代码定义了一个 `Person` 类,该类有一个公共属性 `name` 和一个公共方法 `sayHello`。`__construct` 方法是一个构造函数,当实例化 `Person` 类时会自动调用,用于初始化对象的 `name` 属性。创建了一个 `Person` 对象并调用了 `sayHello` 方法,输出问候语。 题目 2:继承和方法重写 ```php <?php // 定义一个名为 Animal 的基类 class Animal { // 定义一个公共方法 makeSound,用于输出动物的声音 public function makeSound() { echo "Animal makes a sound.\n"; } } // 定义一个名为 Dog 的子类,继承自 Animal 类 class Dog extends Animal { // 重写父类的 makeSound 方法 public function makeSound() { echo "Dog barks.\n"; } } // 实例化 Dog 类,创建一个对象 $dog $dog = new Dog(); // 调用对象的 makeSound 方法 $dog->makeSound(); ?> ``` 问题:请解释上述代码中继承和方法重写的概念,并说明输出结果。 答案:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法。在上述代码中,`Dog` 类继承了 `Animal` 类。方法重写是指子类可以重新定义父类中已有的方法。`Dog` 类重写了 `Animal` 类的 `makeSound` 方法。当调用 `$dog->makeSound()` 时,会执行 `Dog` 类中重写后的 `makeSound` 方法,输出 "Dog barks."。 题目 3:访问控制 ```php <?php // 定义一个名为 Car 的类 class Car { // 定义一个私有属性 $speed private $speed; // 定义一个公共方法 setSpeed,用于设置汽车的速度 public function setSpeed($speed) { if ($speed >= 0) { $this->speed = $speed; } } // 定义一个公共方法 getSpeed,用于获取汽车的速度 public function getSpeed() { return $this->speed; } } // 实例化 Car 类,创建一个对象 $car $car = new Car(); // 调用对象的 setSpeed 方法,设置速度为 60 $car->setSpeed(60); // 调用对象的 getSpeed 方法,获取速度并输出 echo "Car speed: " . $car->getSpeed() . " km/h\n"; ?> ``` 问题:请解释 `private` 访问控制的作用,并说明为什么要使用 `setSpeed` 和 `getSpeed` 方法。 答案:`private` 访问控制修饰符表示属性或方法只能在类的内部访问。在上述代码中,`$speed` 属性是私有的,外部无法直接访问。使用 `setSpeed` 和 `getSpeed` 方法可以对 `$speed` 属性进行安全的访问和修改,例如在 `setSpeed` 方法中可以添加验证逻辑,确保速度值为非负数。 额外注意的逻辑点 1. 在使用继承时,要注意子类和父类之间的关系,避免过度继承导致代码复杂度增加。 2. 在重写方法时,要确保方法的签名(方法名、参数列表和返回类型)与父类中的方法一致。 3. 在使用访问控制时,要根据实际需求选择合适的访问修饰符,确保数据的安全性和封装性。 [2025-06-13 21:36:53 | AI写代码神器 | 1048点数解答]