static修饰的类属性

本文探讨了PHP中静态成员的性质及其在不同脚本间的共享机制,通过实例展示了静态成员如何在单一脚本内的多个对象间传递状态,并解释了其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我看书上说:static成员总是唯一存在的,并且在多个对象之间互享。

因此想到,如果我在a.php中实例化了Person.class.php这个类,并给static $name赋值,那么在b.php中再次实例化这个类,b中能不能读取name属性的新值呢?

代码如下:

Person.class.php

<?php
    class person{
        public static $name;
		
        function __construct($name='vv'){
            //self::$name = $name;
        }

        function getName(){
            return self::$name;
        }
    }
?>

 

a.php

<?php 
    include 'Person.class.php';

    $ren = new Person();
    Person::$name = 'aa';
    echo $ren -> getName(); //aa

    $ren2 = new Person();
    echo $ren2 -> getName(); //aa

?>

 

b.php

<?php 
    include 'Person.class.php';

    $ren3 = new Person();
    echo $ren3 -> getName(); //null
?>


 事实证明:static成员只能在“同一脚本”的多个对象之间互享,b.php并不能读取a.php设置的属性值,后来想到这也理所当然,因为php可以同时产生多个进程,当执行完一个脚本后会自动释放内存,因此b.php无法读取a.php设置的属性!

 

static完整使用说明:见《细说php》第284页。

 

### C++ 中 `static` 修饰类成员函数的作用与用法 #### 1. 静态成员函数的特点 静态成员函数是属于类本身的,而不是某个特定对象的一部分。因此,它可以被看作是一个全局范围内的函数,但它仍然受到类的封装保护机制约束[^1]。由于其特殊性质,静态成员函数具有以下几个显著特点: - **独立于对象存在**:静态成员函数无需创建类的对象即可调用,这使得它们非常适合用于那些不需要操作具体对象状态的操作逻辑[^2]。 - **无隐式的 this 指针**:普通的非静态成员函数会携带一个指向当前对象的隐藏参数——即 `this` 指针;然而,对于静态成员函数来说,则不存在这样的指针[^3]。 - **不可访问非静态成员**:正因为缺少了 `this` 指针的支持,所以静态成员函数不能直接访问或者修改类中的非静态数据成员以及其它非静态方法[^4]。 #### 2. 使用场景分析 基于以上特性,以下是几种常见的使用情景: - 当某些功能仅需依赖于类别属性而非个体实例时,可考虑将其设为静态成员函数。比如计数器应用里统计已生成了多少个实体的情况就可以利用此类技术实现[^3]。 ```cpp #include <iostream> using namespace std; class MyClass { private: static int count; public: MyClass(){ ++count; } ~MyClass(){ --count; } static void showCount(){ cout << "Number of Objects : " << count << endl; } }; int MyClass::count = 0; int main(void){ MyClass obj1, obj2; MyClass::showCount(); // 输出 Number of Objects : 2 return 0; } ``` - 提供工具型辅助服务的方法也可以设计成静态形式以便简化调用流程并减少资源消耗。例如数学运算库里的求平方根之类的通用算法就适合采用这种方式来提供接口给外界使用[^4]。 #### 3. 定义与声明注意事项 当我们在头文件中定义了一个带有 `static` 前缀的成员函数之后,在源文件里面还需要单独对该函数进行实际编码工作,并且此时不能再重复加上 `static` 关键词作为前导说明符[^4]。 ```cpp // Header File (example.h) class Example{ public: static double squareRoot(double value); }; // Source File (example.cpp) #include "example.h" double Example::squareRoot(double value){return sqrt(value);} ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值