繁体   English   中英

java和PHP之间使用静态的区别?

[英]Difference of using static between java and PHP?

在我读到的Java中, static function只能访问static functionstatic variable 我试图找出在 PHP 和 Java 中使用静态的区别。

  1. PHP也是如此吗?
  2. 我们可以调用non-static function内部static functionPHP

我们可以在 PHP 中的静态函数内部调用非静态函数吗?

是的,但不建议。 由于$this关键字在静态上下文中不可用。 但是,您可以使用static / self关键字来做到这一点,但这会导致严格的标准通知

严格标准:非静态方法 A::foo() 不应静态调用

Code Viper 演示

所以最好不要这样做!

  1. 我认为是一样的。

顺便说一句,编辑静态函数(没有正确读取......)

对于 Java,当 JVM 运行或使用某些技术卸载类时,静态变量将在整个生命周期中持续存在。 这意味着,一旦使用了静态变量,它将存在于内存中。

PHP 没有任何内存。 因此,即使声明为“静态”或“全局”的变量也将被销毁......

对于 2. 是的。 如果你的类的实例很少需要,你可以让静态方法创建一个实例,调用非静态方法并返回值。

class Scope {
    public function mynonstatic() {
    }

    public static function mystatic() {
        $s = new Scope();
        return $s->mynonstatic();
    } }

请记住,静态方法实际上只是一个范围缩小的全局函数。 它们很有用,但不应在没有充分理由的情况下创建。

来源:http: //yiyujia.blogspot.ro/2010/09/static-variable-in-php-vs-static.html

首先 static 是一个关键字。 它在声明变量或函数名称之前使用。

Java中的静态变量是什么? Java中的静态变量是属于类的变量,在执行开始时只初始化一次。 它是一个属于类而不是对象(实例)的变量。 静态变量仅在执行开始时初始化一次。 在初始化任何实例变量之前,将首先初始化这些变量。

*由类的所有实例共享的单个副本 *静态变量可以通过类名直接访问,不需要任何对象。

    public class Demo{
   public static void main(String args[]){
     Student s1 = new Student();
     s1.showData();
     Student s2 = new Student();
     s2.showData();
     //Student.b++;
     //s1.showData();
  }
}

class Student {
int a; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.

  Student(){
   //Constructor incrementing static variable b
   b++;
  }

   public void showData(){
      System.out.println("Value of a = "+a);
      System.out.println("Value of b = "+b);
   }
//public static void increment(){
//a++;
//}

}

静态变量 PHP 的一个特性是删除变量,一旦它完成执行并释放内存。 有时我们甚至需要在函数执行完成后存储一个变量。 因此,变量作用域的另一个重要特征是静态变量。 我们在变量前使用static关键字来定义一个变量,这个变量称为静态变量。

静态变量只存在于局部函数中,但在程序执行离开作用域后不会释放其内存。 借助一个例子来理解它:

   <?php  
    function static_var()  
    {  
        static $num1 = 3;       //static variable  
        $num2 = 6;          //Non-static variable  
        //increment in non-static variable  
        $num1++;  
        //increment in static variable  
        $num2++;  
        echo "Static: " .$num1 ."</br>";  
        echo "Non-static: " .$num2 ."</br>";  
    }  
      
//first function call  
    static_var();  
  
    //second function call  
    static_var();  
?>  
//Output:

Static: 4
Non-static: 7
Static: 5
Non-static: 7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM