[英]Difference of using static between java and PHP?
在我读到的Java
中, static function
只能访问static function
或static variable
。 我试图找出在 PHP 和 Java 中使用静态的区别。
PHP
也是如此吗?non-static function
内部static function
在PHP
?我们可以在 PHP 中的静态函数内部调用非静态函数吗?
是的,但不建议。 由于$this
关键字在静态上下文中不可用。 但是,您可以使用static
/ self
关键字来做到这一点,但这会导致严格的标准通知
严格标准:非静态方法 A::foo() 不应静态调用
所以最好不要这样做!
顺便说一句,编辑静态函数(没有正确读取......)
对于 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.