在类中定义成员函数的基本要素
成员函数的基本语法
在 PHP 的面向对象编程中,成员函数被称为方法,定义在类的花括号内。方法必须使用 function 关键字,后跟方法名和圆括号用于参数,最后是花括号包裹的实现体。方法可以带参数,也可以没有参数,返回值通过 return 语句返回,并且可以在同一个类中多次定义不同的方法来实现不同的行为。
访问修饰符决定方法的可见性,常用的 public、private、protected 三种形式。选择合适的修饰符有助于实现封装性与接口设计,并影响调用方能否直接访问该方法。
sayHello();
?>构造函数与析构函数的特殊性
构造函数(__construct)在对象创建时自动执行,通常用来进行初始化工作(如设置初始属性、建立连接等)。析构函数(__destruct)在对象生命周期结束时执行,可用于资源清理,但在 PHP 的垃圾回收机制下并不一定会精准触发。
通过构造函数可以确保新建对象具备合理的初始状态,而不需要在外部再手动初始化。
name = $name;}public function greet() {return "Hi, " . $this->name;}
}
$u = new UserInit("Alice");
echo $u->greet();
?>修饰符、可见性与静态成员的使用
public、private、protected 的含义
public 方法对外可见,可以通过对象实例在任意作用域访问;private 方法只能在当前类内部访问,对子类不可见;protected 方法在当前类及其派生类中可见,用于实现受控的内部行为扩展。
在设计接口时,合理区分这三种可见性有助于隐藏实现细节、暴露必要的外部能力,并防止外部直接修改内部状态。
count++; }private function secretIncrement() { $this->secret++; }protected function guardIncrement() { $this->guard++; }public function publicCall() {$this->increment();$this->secretIncrement();$this->guardIncrement();return $this->count;}
}
$cnt = new Counter();
echo $cnt->publicCall();
?> 静态方法与对象方法的区别
静态方法属于类本身,不需要实例化对象即可调用,通常用于提供与对象无关的工具性功能;对象方法属于具体对象,需要通过对象实例调用,并且可以访问对象的非静态属性与状态。
静态方法使用 ClassName::method() 调用;对象方法使用 $object->method() 调用,且在方法内部可以通过 $this 访问对象的属性和其他方法。
multiply(2, 4);
?> 调用成员函数的有效方式:在同一类、在子类、在外部
在同一类中调用其他方法
一个方法可以通过 $this 访问同一对象中的其他方法或属性,实现内部逻辑的组合,从而避免将所有行为暴露出去。
在同一类内部调用其他方法时,私有方法也可以被调用,因为它们在当前对象的上下文中可见。
getGreeting();}private function getGreeting() {return "Hello";}
}
$m = new Messenger();
echo $m->greet();
?>通过静态上下文调用静态方法
在子类层级中,若需要静态绑定的语义,可以使用 self:: 直接调用本类中的静态方法,若涉及到子类的重写,使用 static:: 实现晚绑定。
静态方法不依赖对象实例,因此不能访问非静态属性,但可以通过参数传递数据给方法。

demo();
?> 实战示例:从简单类到一个完整的对象模型
案例:用户信息的类设计
设计一个 User 类,包含私有属性 name、age,通过构造函数初始化,并提供公有的 getter/setter,最终输出一个简短的用户信息。
通过这样的结构可以清晰控制对内部状态的访问,避免直接暴露属性造成不可预期的修改。
name = $name;$this->age = $age;}public function setName($name) { $this->name = $name; }public function getName() { return $this->name; }public function setAge($age) { $this->age = $age; }public function getAge() { return $this->age; }public function getProfile() {return $this->name . " - " . $this->age;}
}
$u = new User("Alice", 30);
echo $u->getProfile();
?> 扩展:子类继承与方法重写
通过继承可以在不重复编写代码的前提下扩展功能,子类可以覆盖父类的方法以实现多态行为。
下面的示例演示了一个 Admin 类继承自 User,并对 getProfile() 进行方法重写,增加角色信息。
role = $role;}public function getProfile() {return parent::getProfile() . " - " . $this->role;}
}
$admin = new Admin("Bob", 40, "super");
echo $admin->getProfile();
?> 

