php类属性必须用public、protected或private声明,不可省略;var已废弃,仅作public别名;php 7.4+支持类型声明如public string $title;,但初始化值须为常量,动态逻辑需移至__construct()中。

PHP类中定义变量用public、protected或private
PHP类里的“变量”叫属性(property),不能像函数外那样直接写$name = 'xxx';,必须带访问修饰符。不加修饰符会报错:Parse error: syntax error, unexpected '$name'。
-
public $name;:外部和子类都能读写 -
protected $age;:仅本类和子类可访问 -
private $id;:只在当前类内部可用 - 可以同时声明并初始化:
public $status = 'active'; - PHP 7.4+ 支持类型声明:
public string $title;,但不能和默认值混用(如public string $title = 'test';在8.0+才允许)
为什么不能用var?它现在只是public的别名
var是PHP 4遗留语法,PHP 5起已被弃用。虽然现在写var $count;不会报错,但它会被自动转为public $count;,语义模糊且容易误导——别人看不出你是否真想公开这个属性。
- 现代代码一律用
public/protected/private - IDE和静态分析工具(如PHPStan)对
var支持弱,可能漏掉访问控制问题 - 如果类里混用
var和private,维护时极易误判可见性范围
类属性不能放表达式,只能是静态值
PHP不允许在属性声明处执行函数或运算,比如public $now = time();或public $path = __DIR__ . '/config';都会导致解析错误:Constant expression contains invalid operations。
- 这类逻辑必须移到构造方法
__construct()里处理 - 正确写法:
public $now; public $path; public function __construct() { $this->now = time(); $this->path = __DIR__ . '/config'; } - 如果想延迟初始化,可以用
??=(PHP 7.4+)在首次访问时赋值,但需配合getter方法或魔术方法
静态属性要用static关键字,且必须显式加访问修饰符
静态属性属于类本身而非实例,常见于配置缓存、单例ID等场景。它必须和public/protected/private一起用,不能单独写static $cache;。
- 正确:
private static array $instances = []; - 错误:
static $instances = [];→ 报错:Parse error: syntax error, unexpected 'static' - 访问时用
self::$instances或static::$instances,不能用$this->instances - 静态属性不能用对象属性语法初始化(如
new DateTime()),同样受限于常量表达式规则
public,结果改个字段名就导致下游解析失败——这时候才想起当初该用private配getXXX()。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











