登录
首页 >  文章 >  php教程

PHP类中变量如何定义?

时间:2026-04-21 20:00:36 209浏览 收藏

PHP类中变量定义有严格规范:必须使用public、protected或private显式声明成员变量,禁止裸写如`$name = 'xxx'`;属性初始化仅支持字面量(如null、数字、数组),动态值须在`__construct()`中赋值;static变量需加`static`关键字并用`self::`或`static::`访问,避免误用`$this->`导致静默错误;PHP 7.4+虽支持属性类型声明(如`public string $name;`),但默认值限制严苛(仅允许`null`或配合可空类型),且类型不匹配会直接触发致命错误——这些细节看似琐碎,却是新手踩坑重灾区和线上故障常见源头,掌握它们,才能写出健壮、可维护的面向对象PHP代码。

PHP变量在类中如何定义_PHP类成员变量声明方式【基础】

PHP类中声明成员变量必须用publicprotectedprivate

PHP不允许在类里直接写$name = 'xxx';这种裸变量。不加访问修饰符的变量声明会报致命错误:Parse error: syntax error, unexpected '$name'

这是初学者最常卡住的地方——以为和函数内定义变量一样自由,其实类上下文完全不一样。

  • public:外部可读可写,子类可继承可访问
  • protected:仅本类及子类可访问,外部不可见
  • private:仅本类内部可用,连子类都访问不到

示例:

class User {
    public $id;
    protected $email;
    private $password;
}

不能在声明时用函数或表达式初始化public/protected/private变量

PHP类属性声明阶段只支持字面量(stringintnullarray等),不能调用time()new DateTime()或任何函数。

否则会报错:Parse error: syntax error, unexpected 'new' (T_NEW) 或类似提示。

  • ✅ 允许:public $created_at = null;public $tags = [];
  • ❌ 禁止:public $now = time();public $dt = new DateTime();

需要动态值?统一放进__construct()里赋值。

static成员变量要显式加static关键字,且访问方式不同

静态变量不属于某个实例,而是整个类共享。漏写static就变成普通属性;写了却不加self::static::去访问,运行时会出错或取到错误值。

  • 声明:public static $count = 0;
  • 读取:self::$count(当前类)或 static::$count(后期静态绑定)
  • 外部访问:User::$count,不是$user->count

常见误操作:$this->count++ 对静态变量无效,会静默创建一个同名实例属性,原静态值不变。

PHP 7.4+ 支持属性类型声明,但有严格限制

从 PHP 7.4 开始可以写public string $name;,但注意:它不支持默认值为null以外的混合类型,也不能省略访问修饰符。

  • ✅ 合法:public ?string $name = null;protected int $age = 0;
  • ❌ 非法:public $name = 'abc';(无类型)、public string $name = 'abc';(非null默认值需配合?string或类型允许)

类型声明后,赋值时类型不匹配会触发Fatal error,不是警告——这点比函数参数类型更严格。

实际项目里,如果团队还在用 PHP 7.3 或更低版本,这类语法会直接导致解析失败,上线前务必确认环境版本。

本篇关于《PHP类中变量如何定义?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>