太好了!我们来编写 borrowBook() 方法。
在这个方法内部,我们需要一个 if 语句来检查我们的私有变量。如果书有空,我们就把这个变量的值设为 false。如果没有空,我们就告诉用户这本书已经被借走了。
class Book {
private $title;
private $isAvailable = true;
public function __construct($title) {
$this->title = $title;
}
public function borrowBook() {
if ($this->isAvailable) {
$this->isAvailable = false;
return "You have borrowed '" . $this->title . "'. 📚";
} else {
return "Sorry, '" . $this->title . "' is already checked out. ❌";
}
}
}
// Let's test it:
$myBook = new Book("The Great Gatsby");
echo $myBook->borrowBook(); // First time: Success!
echo $myBook->borrowBook(); // Second time: Sorry, already checked out.
通过使用封装(将 $isAvailable 设为私有),我们确保只有通过 borrowBook() 方法才能更改其状态,这符合我们库的规则。
接下来:接口和特性 🛠️
现在您已经掌握了这四大支柱,让我们来看看如何处理复杂的代码重用。
- 接口(“契约”)
接口就像一份法律合同。它告诉类:“我不在乎你如何实现,但你必须拥有这些特定的方法。”
例如,书籍和 DVD 都是“可借阅的”,但借阅方式不同(一个使用条形码,另一个可能需要数字密钥)。
interface Borrowable {
public function checkOut();
public function checkIn();
}
class DVD implements Borrowable {
public function checkOut() {
return "DVD ejected and registered.";
}
public function checkIn() {
return "DVD returned to case.";
}
}
- 特性(“复制粘贴”工具)
PHP 不允许一个类继承多个父类(即“双重继承”)。特性解决了这个问题。它们是一段段代码,你可以将其“复制粘贴”到任何类中。
想象一下,一个日志特性可以记录事件发生的时间。你可能希望你的 User 类和 Book 类都能记录消息。
trait Logger {
public function log($message) {
echo "[LOG]: " . $message;
}
}
class User {
use Logger; // This class now has the log() method!
}
基于此,如果您要构建一个“数字图书馆”系统,您会使用接口还是特性来确保电子书和有声读物都具有强制性的 playSample() 方法?
WP开发教程 WordPress导师在线教程