php object 实现
PHP 对象实现基础
在 PHP 中,对象是通过类(class)定义的实例。类作为对象的蓝图,定义了属性和方法。对象通过 new 关键字实例化。
class Car {
public $color;
public function startEngine() {
return "Engine started!";
}
}
$myCar = new Car();
$myCar->color = "red";
echo $myCar->startEngine(); // 输出: Engine started!
对象属性与方法
对象的属性存储数据,方法定义行为。属性和方法可以设置为 public、protected 或 private,控制访问权限。
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
$user = new User();
$user->setName("Alice");
echo $user->getName(); // 输出: Alice
构造函数与析构函数
构造函数 __construct 在对象创建时自动调用,用于初始化。析构函数 __destruct 在对象销毁时调用。
class Book {
public $title;
public function __construct($title) {
$this->title = $title;
}
public function __destruct() {
echo "Book object destroyed.";
}
}
$book = new Book("PHP Guide");
echo $book->title; // 输出: PHP Guide
继承与多态
PHP 支持单继承,子类通过 extends 继承父类的属性和方法。多态通过方法重写实现。

class Animal {
public function makeSound() {
return "Some sound";
}
}
class Dog extends Animal {
public function makeSound() {
return "Bark";
}
}
$dog = new Dog();
echo $dog->makeSound(); // 输出: Bark
接口与抽象类
接口(interface)定义方法规范,抽象类(abstract class)允许部分实现。类可以实现多个接口,但只能继承一个抽象类。
interface Logger {
public function log($message);
}
abstract class BaseLogger implements Logger {
abstract public function log($message);
public function timestamp() {
return date("Y-m-d H:i:s");
}
}
class FileLogger extends BaseLogger {
public function log($message) {
echo $this->timestamp() . ": " . $message;
}
}
$logger = new FileLogger();
$logger->log("Error occurred"); // 输出: 当前时间戳 + Error occurred
魔术方法
PHP 提供魔术方法(如 __get、__set、__call 等)用于动态属性或方法处理。
class DynamicProperties {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
public function __get($name) {
return $this->data[$name] ?? null;
}
}
$obj = new DynamicProperties();
$obj->dynamicProp = "Value";
echo $obj->dynamicProp; // 输出: Value
对象序列化
对象可通过 serialize 和 unserialize 转换为字符串或还原,常用于存储或传输。

class SerializableClass {
public $data;
public function __construct($data) {
$this->data = $data;
}
}
$obj = new SerializableClass("Test");
$serialized = serialize($obj);
$restored = unserialize($serialized);
echo $restored->data; // 输出: Test
匿名对象
PHP 允许动态创建匿名对象,适用于临时数据封装。
$anonObj = new stdClass();
$anonObj->property = "Anonymous";
echo $anonObj->property; // 输出: Anonymous
对象比较
== 比较对象属性值是否相同,=== 比较是否为同一实例。
class Compare {
public $value;
}
$a = new Compare();
$a->value = 1;
$b = new Compare();
$b->value = 1;
$c = $a;
var_dump($a == $b); // true
var_dump($a === $b); // false
var_dump($a === $c); // true
对象遍历
通过 foreach 遍历对象的可见属性。
class IterableClass {
public $a = 1;
protected $b = 2;
private $c = 3;
}
$obj = new IterableClass();
foreach ($obj as $key => $value) {
echo "$key: $value\n"; // 输出: a: 1
}






