【问题标题】:Difference of using static between java and PHP?java和PHP之间使用静态的区别?
【发布时间】:2014-04-24 11:24:34
【问题描述】:

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

  1. PHP 中也有同样的情况吗?
  2. 我们可以在static function 中的PHP 中调用non-static function 吗?

【问题讨论】:

  • 您可以在 PHP 和 Java 中从静态方法调用非静态方法——您只需要提供调用它的对象。

标签: java php static


【解决方案1】:

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

可以,但不建议这样做。因为$this 关键字在静态上下文中不可用。但是,您可以使用 static / self 关键字来执行此操作,但这会导致严格标准通知

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

Demonstration on Code Viper

所以最好不要这样做!

【讨论】:

  • class A { public function foo() { print("<br/>foo A"); } public static function bar() { static::foo(); } } 以上是否有效?
  • 是的,我也发现了和你一样的。因此在 PHP 和 Java 中静态的使用是不一样的。
  • 您会收到警告,恕我直言,您不应该这样做。你可以看演示。
  • 在 PHP 中你会收到警告,它会执行。但是在java中它会是编译时错误。你不可以做这个。因此在 PHP 和 Java 中并不相同
  • @Rahul,我同意这一点,是的,我看到你会得到一个编译错误,但是 PHP 没有编译器,对吗?这只是一个解释。我将编辑答案。
【解决方案2】:
  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

【讨论】:

  • 我编辑了我的答案,因为我认为这个问题谈到了静态变量......我不会删除我的答案,因为它可以带来一些额外的答案......
  • 很高兴您明确了架构(尤其是内存)的差异,但如果您引用了其他人 [yiyujia.blogspot.ro/2010/09/…] 请提供指向他们的链接,以便其他人可以详细研究问题
【解决方案3】:

第一个静态是一个关键字。 它在声明变量或函数名之前使用。

什么是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2010-10-31
    • 2011-02-25
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多