浅析PHP的静态方法和静态属性

PHP类中静态与非静态方法详解
本文通过一个PHP示例代码详细解释了在PHP类中如何正确使用静态方法和非静态方法来访问类属性。包括静态方法访问静态属性的方式及注意事项,以及非静态方法如何访问实例属性。
<?php
header("content-type:text/html;charset=utf-8");
echo '<pre>';

class Goods
{
    public static $goods_name = '咖啡';
    public $price = 9.90;
    public static function get_goods_name()
    {
        echo self::$goods_name; //静态方法调用静态属性,使用self关键词
        // Fatal error: Using $this when not in object context
//         echo $this->price; //错误的用法。静态方法不能调用非静态属性,因为 $this代表实例化对象,而这里是类,不知道 $this代表哪个对象
        echo "\n";
    }
    
    public function get_price()
    {
        echo self::$goods_name; //普通方法调用静态属性,同样使用self关键词
        echo '【单价:】' . $this->price;
        echo "\n";
    }
}

$goods = new Goods();

$goods->get_price();

//对象可以访问静态方法
$goods->get_goods_name();

//对象访问静态属性。不能这么访问$goods->goods_name,因为静态属性的内存位置不在对象里
echo $goods::$goods_name;
echo "\n";
// Strict Standards:  Non-static method Goods::get_price() should not be called statically
// Goods::get_price();//错误的用法。

 

在 C# 中,静态类静态构造函数以及静态变量都是特定类型的成员,它们的行为常规类有所不同。下面是关于这些概念的简要介绍: 1. **静态类Static Class)**: - 静态类是一个不能被实例化的类,意味着没有默认的构造函数,所以无法创建它的对象。 - 它通常用来封装一组相关的静态方法属性,因为静态类中的所有成员都是共享的,适用于全局访问。 - 由于静态类不能派生,所以它不能包含非静态成员。 2. **静态构造函数(Static Constructor)**: - 类似于构造函数,但它是为整个静态类准备的,而不是为每个实例。 - 只有一个静态构造函数,当第一次使用该类时会被自动调用。 - 通常用于执行类的初始化操作,如设置常量、配置资源等,但不能直接修改实例变量。 3. **静态变量(Static Variables)**: - 静态变量是在类级别定义的,属于整个类,而不是某个具体的对象。 - 所有对该静态变量的引用都指向同一个内存位置,这意味着无论何时何地,对同一静态变量的读写都会影响到其他地方的程序。 - 需要注意的是,静态字段如果没有显式初始化,其值是不确定的(编译器默认),如果初始化了,通常是类型默认值(如`int`为0,`string`为空字符串)。 **相关问题--:** 1. 静态类普通类的区别是什么? 2. 静态构造函数何时会自动执行? 3. 如何确保静态变量在整个应用中始终只有一个副本? 4. 在什么时候使用静态变量比实例变量更合适?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值