PHP变量在类中如何定义_PHP类中定义变量格式【格式】

2次阅读

php类中定义变量必须使用publicprotectedprivate访问修饰符,php 7.4+严格要求;静态变量属类本身,需用self::或Static::访问;属性类型声明须与默认值兼容,复杂初始化应在__construct()中完成。

PHP变量在类中如何定义_PHP类中定义变量格式【格式】

PHP类中定义变量必须用访问修饰符

不加 publicprotectedprivate 的变量在类里直接报错,PHP 7.4+ 会直接拒绝解析。这不是风格问题,是语法硬性要求。

  • public $name;:外部可读可写,适合配置项或简单数据透出
  • private $cache;:仅本类可用,避免被子类意外覆盖或误用
  • protected $connection;:本类 + 子类可用,继承场景下最常用
  • 不能写 var $old_style; —— 这是 PHP 4 的遗留写法,已废弃且在严格模式下报错

静态变量和普通变量别混用

静态变量属于类本身,不是某个实例;普通变量属于每个对象实例。用错会导致状态污染或空指针

  • public static $counter = 0;:所有实例共享一份,适合计数器、单例句柄
  • public $id;:每个 new MyClass() 都有独立一份
  • 错误示例:$this::$counter 是错的,应该用 self::$counterstatic::$counter
  • 静态变量不能用 $this-> 访问,否则运行时报 Fatal Error: using $this when not in Object context

类型声明和默认值要对齐

PHP 7.4+ 支持属性类型声明,但和默认值配合时容易踩坑:类型必须能容纳默认值,且 NULL 值需显式允许。

  • public String $name = ''; ✅ 合法
  • public int $count = null; ❌ 报错:null 不是 int
  • public ?int $count = null; ✅ 允许 null,但注意这是可空类型,调用方需判空
  • public Array $items = []; ✅ 空数组合法;但 = new ArrayObject() 就不行,因为类型是 array,不是对象

构造函数里赋值比声明时更灵活

声明时设默认值适合固定常量;但涉及依赖注入、条件初始化、或需要调用方法时,得在 __construct() 里做。

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

  • 声明期只能用字面量:public string $env = 'dev'; ✅;public string $now = date('Y-m-d'); ❌ 不允许函数调用
  • 想用 new DateTime() 或读配置?必须放构造函数:$this->logger = new Logger($config['level']);
  • 如果变量可能为 null,又不想强制类型声明,可以只声明类型,不设默认值:private Logger $logger;,然后在 __construct() 中赋值(PHP 8.0+ 支持)

类型声明和访问控制是绑定生效的,少写一个 private 或漏掉 ? 都会立刻暴露问题,而不是等到运行时才发现。

text=ZqhQzanResources