php类怎么运行_php类定义与调用执行方法【详解】

3次阅读

php类不能直接运行,必须先通过require/include加载、再用new实例化、最后调用publicStatic方法;否则将静默失败或报错。

php类怎么运行_php类定义与调用执行方法【详解】

PHP 类不能直接运行,必须实例化后调用方法

PHP 类本身不是可执行单元,class 定义只是蓝图。你写完 class User,直接双击 PHP 文件或命令行执行它,什么都不会发生——连报错都没有,因为语法合法但没触发任何行为。

  • 常见错误现象:php user.php 运行后无输出、无报错、进程秒退
  • 必须通过 new User() 创建对象,再调用其方法(如 $user->login())才真正执行逻辑
  • 如果类里有 __construct(),实例化时自动触发;没调用实例,构造函数也不会跑
  • 命令行执行类文件时,建议末尾加一句测试调用,比如 (new User())->sayHello();,否则等于白跑

require / include 是加载类的前提,路径写错就 Class ‘X’ not found

类定义在单独文件里(如 User.php),当前脚本想用它,必须先加载。不引入,PHP 根本不知道这个类存在。

  • 错误信息典型是:Fatal Error: Uncaught Error: Class 'User' not found
  • require 'User.php'include 'User.php' 都可以,但推荐 require:加载失败直接中止,避免静默出错
  • 路径必须准确:require './lib/User.php'require 'lib/User.php' 在不同工作目录下行为不同;建议用 __DIR__ . '/lib/User.php' 消除歧义
  • 使用 composer 后,应改用 require_once 'vendor/autoload.php',不再手动 require 类文件

public 方法才能从外部调用,private/protected 会报 Call to undefined method

类里定义的方法默认是 public,但显式写了 private function init()protected function validate(),外部对象就调用不了。

  • 错误信息示例:Fatal error: Uncaught Error: Call to private method User::init()
  • 只在类内部可用:private子类可用但外部不行:protected;完全开放:public
  • CLI 脚本中调试时,别在 new User() 后直接写 ->init(),先确认访问控制修饰符
  • 静态方法需用 User::doSomething() 调用,且静态方法里不能用 $this;非静态方法必须先实例化

__autoload 已废弃,PHP 7.2+ 必须用 spl_autoload_register 或 Composer

老教程里写的 function __autoload($class) { require $class . '.php'; } 在 PHP 7.2+ 直接报 Deprecated,而且不生效。

立即学习PHP免费学习笔记(深入)”;

  • 替代方案只有两个靠谱选择:spl_autoload_register() 或 Composer 的自动加载
  • 手写自动加载示例:spl_autoload_register(function($class) { require __DIR__ . '/classes/' . $class . '.php'; });
  • Composer 方式更稳:定义 "autoload": {"psr-4": {"App": "src/"}},然后 composer dump-autoload
  • 注意大小写:linuxUser.php 里定义 class user 会导致加载失败;类名和文件名大小写要严格一致

事情说清了就结束。类能不能跑,关键就三件事:文件得 load 进来、对象得 new 出来、方法得 public 或 static 得对路。漏一个,就静默失败或者直接报错。

text=ZqhQzanResources