PHP中类名::class的用法

本文通过实例详细解析了PHP中命名空间的概念及类名::class的使用方法,展示了如何在不同命名空间下获取完整类名。

第一次看到这个用法是在 laravel 框架里,自己在网上查了资料大概了解了一下,这里放出我自己的理解,有错误请指出

实例

namespace test;
class Test{}
echo Test::class;

echo "\n";

namespace test1;
class Test1{}
echo Test1::class;

//结果 
test\Test
test1\Test1

由上面的例子可以看出,类名::class 实际上是带命名空间的类名,下面放上官方手册的解释
在这里插入图片描述

### 类名与函数的用法及语法 在 C++ 或 PHP 等编程语言中,类名和函数之间的关系通常通过作用域解析运算符 `::` 来表示。这种语法用于访问类的静态成员、方法或常量,或者用于调用类中的非静态方法(需要实例化对象)。以下是关于类名和函数用法的详细说明: #### 1. 静态成员或方法的调用 当一个函数被定义为静态时,可以通过类名直接调用它,而无需创建类的实例。语法如下: ```cpp ClassName::staticFunctionName(); ``` 例如,在 C++ 中: ```cpp class MyClass { public: static void myStaticMethod() { std::cout << "This is a static method." << std::endl; } }; MyClass::myStaticMethod(); // 调用静态方法 ``` 此代码展示了如何使用类名调用静态方法[^1]。 #### 2. 非静态成员或方法的调用 对于非静态方法,必须先创建类的实例,然后通过对象调用方法。语法如下: ```cpp ClassName instance; instance.nonStaticFunctionName(); ``` 例如: ```cpp class MyClass { public: void myNonStaticMethod() { std::cout << "This is a non-static method." << std::endl; } }; MyClass obj; obj.myNonStaticMethod(); // 调用非静态方法 ``` #### 3. 成员指针的使用 如果需要传递类的成员函数作为参数,必须使用成员指针语法。错误提示 `error C3867` 表示未正确使用成员指针。正确的语法是使用 `&` 操作符来获取成员函数地址[^2]。例如: ```cpp class MyClass { public: void memberFunction() { std::cout << "This is a member function." << std::endl; } }; std::thread t(&MyClass::memberFunction, MyClass()); // 正确传递成员函数 t.join(); ``` #### 4. 动态类名调用 在某些动态语言(如 PHP)中,可以使用变量存储类名并动态调用其方法。但需要注意,直接将字符串作为类名调用可能会导致问题[^3]。例如: ```php $className = 'MyClass'; $className::myStaticMethod(); // 正确调用静态方法 // 错误示例 $this->variable->other['class']::my_static_method(); // 不起作用 ``` 为了使上述代码工作,应先将类名分配给变量[^3]: ```php $dynamicClass = $this->variable->other['class']; $dynamicClass::my_static_method(); // 正确调用 ``` #### 5. 命名空间的作用 在现代编程语言中,命名空间通常用于避免类名冲突。当使用命名空间时,完整类名应包括命名空间前缀。例如: ```cpp namespace MyNamespace { class MyClass { public: static void myStaticMethod() { std::cout << "This is a namespaced static method." << std::endl; } }; } MyNamespace::MyClass::myStaticMethod(); // 调用命名空间中的静态方法 ``` ### 注意事项 - 如果遇到 `std::thread::thread` 的错误提示,可能是由于传递的参数类型不匹配。确保正确传递成员函数指针或普通函数指针。 - 在动态语言中,直接使用字符串作为类名可能不起作用,需先将其赋值给变量后再调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值