📜  什么时候在PHP使用静态类和实例化类?

📅  最后修改于: 2022-05-13 01:54:11.581000             🧑  作者: Mango

什么时候在PHP使用静态类和实例化类?

先决条件 - 静态函数PHP

在PHP,我们可以同时拥有静态和非静态(实例化)类。

静态类

简介: PHP中的静态类是一种在程序中仅实例化一次的类。它必须包含静态成员(变量)或静态成员函数(方法)或两者。使用范围解析运算符(::) 可以在不创建对象的情况下访问变量和方法。但这里有一个问题,静态方法不能访问非静态变量,因为这需要首先创建对象。因此,要访问静态类的变量,我们必须使用关键字static 将它们声明为静态

示例 1:


输出:

text

示例 2:此示例检查创建的字符串的长度是否大于或等于 7。

= self::$num1)
            return true;
        else
            return false;
    }
}
  
// String is created
$str = "GeeksforGeeks";
  
// Static function is called 
// using scope resolution operator
if(GFG::check($str))
    echo "String is valid!";
else
    echo "String is NOT valid!";
      
?>
输出:
String is valid!

    实例化(非静态)类

    简介:实例化是指在服务器内存中创建一个对象的实例。实例化类是那些需要在调用变量和方法之前创建对象的类。它类似于 C++、 Java和其他编程语言中使用的普通类。这些类可以被多次实例化,并为其每个对象保存唯一的值

    示例 1:

    var;
        }
    }
      
    $test = new GFG();
    $test->func();
      
    ?>
    
    输出:
    text
    

    示例 2:该程序检查创建的字符串长度是否大于或等于 7。

    = $this->num1)
                return true;
            else
                return false;
        }
    }
      
    // Object 1 is created
    $str1 = new GFG();
    if ($str1->check("GeeksforGeeks"))
        echo "String is valid!";
    else
        echo "String is NOT valid!";
      
    // Object 2 is created
    $str2 = new GFG();
    if ($str2->check("Geeks"))
        echo "String is valid!";
    else
        echo "String is NOT valid!";
          
    ?>
    
    输出:
    String is valid!
    String is NOT valid!
    

    静态类与实例化类

    • 静态类用于该类的单个实例,而实例化类用于需要多个实例时。
    • 静态类包含静态变量和静态方法,而实例化类包含非静态变量和非静态方法。
    • 具有静态类的程序很难测试和扩展,而具有非静态类的程序则提供简单的测试和扩展属性。
    • 在静态类的情况下,数据主要与类本身相关,而在实例化类的情况下,数据与相应的对象相关,而不是类本身。

      什么时候用什么?
      如果以下任何语句适用于以下情况,请考虑使用静态类

      • 类的方法和变量的功能是通用的(全局)
      • 当您希望各个字段或变量具有相同的值交叉实例时,或者当您希望该类的单个实例时。
      • 创建单例(只能实例化一次的特定类)或实用程序(帮助程序)类时。
      • 当每个对象都拥有相同的数据并且需要创建一个只对这些数据起作用的类时,就可以使用静态类。
      • 不需要测试(主要是单元)或可维护性

      如果以下任何语句适用于以下情况,请考虑使用实例化类:

      • 该类的功能不是全局的,或者可能有多个该类的实例。
      • 当类的每个对象都有自己的唯一数据(如电子邮件 ID)时。
      • 需要测试和可维护性。

      例子:考虑一个店铺,购买商品生成的账单包含商品名称,每件商品的费用,总费用,日期,店铺名称,注册店号,地址等。 这里,对于不同的客户购买不同的项目 项目名称、总成本、日期等的值会有所不同。因此,这些可以使用实例化类获得,其中每个客户都表示为该类的一个对象,每个对象将具有不同的属性。但店名、注册店号、商品费用和地址对所有顾客都是一样的。所以这里静态类可以用于一次实例化所有这些值,然后可以多次使用这些值