我知道有很多信息可以根据这个,但我找不到任何真正有用和可理解的信息。那么public static function
和public function
之间有什么区别?为什么有时候我必须使用static
这个词?
我知道静态函数由::
调用而非静态函数由->
调用,但真正的区别(为什么有时候我应该使用static
我得不到)。据我所知,当我使用static
时,我可以从另一个类中调用它。没有它 - 我不能。但我很确定我错了。
我认为这些信息对很多人来说真的很有帮助。感谢您抽出时间来解释它。
答案 0 :(得分:4)
OOP方法中的关键字静态描述了未使用新对象实例化的函数/变量,但在没有实例化的情况下可用,并且在对象的所有实例之间共享。 它可以很方便地使用,对于变量,您可以在同一类的对象之间共享“计数器”或“标志”。 或者,如果要构建一个utils类库,您可能需要一个带有静态方法的静态单例,因此项目中的任何代码都可以调用它而无需“新”调用。
答案 1 :(得分:3)
静态表示可以在不实例化类的情况下访问它。这对常数很有用。
静态方法不需要对对象的状态产生任何影响。除参数外,它们还可以包含局部变量。
公开:公开声明的项目可以在任何地方访问。
示例:强>
class test {
public function sayHi($hi = "Hi") {
$this->hi = $hi;
return $this->hi;
}
}
class test1 {
public static function sayHi($hi) {
$hi = "Hi";
return $hi;
}
}
// Test
$mytest = new test();
print $mytest->sayHi('hello'); // returns 'hello'
print test1::sayHi('hello'); // returns 'hello'
更多信息:
答案 2 :(得分:3)
首先是什么是静态的?
静态意味着可以在不实例化类的情况下访问它。 这对于常数很有用。
静态方法不需要对对象的状态产生影响。他们 除参数外还可以有局部变量。
现在为什么要写公共功能
属性,方法或(从PHP 7.1.0开始)的常量的可见性 可以通过在声明前添加关键字public来定义, 受保护或私人。可以访问声明为public的类成员 到处。声明受保护的成员只能在 类本身以及继承和父类。成员宣布为 private只能由定义成员的类访问。
使用公共功能示例
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
也是静态示例
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>
答案 3 :(得分:1)
public
关键字可以从 确定您可以访问该功能,其中:
public
允许从任何地方访问private
仅允许来自班级内的访问关键字static
使函数可以访问而无需此类的实例。这意味着您可以从任何上下文调用static
函数,而无需创建类的实例,否则您将不得不这样做。注意:由于您没有可以在调用静态方法时参考的对象,因此无法使用this
关键字。
答案 4 :(得分:1)
公共静态函数和公共函数之间的简单明显区别是:您可以在不创建对象的情况下访问静态函数。
以下代码段可让您更清晰:
class my_public {
public function myfunc() {
$val = "Hello I am public function";
return $val;
}
}
class my_static_public {
public static function myfunc() {
$val = "Hello I am public static function";
return $val;
}
}
// Access Test
$mytest = new my_public();
print $mytest->myfunc(); // returns 'Hello I am public function'
print my_static_public::myfunc(); // returns 'Hello I am public static function'
有关静态的更多信息click here。
答案 5 :(得分:0)
这里存在完全不同的类型: (速度,免疫,可及性,有效性) http://www.codedwell.com/post/59/static-vs-non-static-methods-in-php