php中的公共STATIC和公共函数有什么区别?

时间:2017-08-03 06:30:20

标签: php

我知道有很多信息可以根据这个,但我找不到任何真正有用和可理解的信息。那么public static functionpublic function之间有什么区别?为什么有时候我必须使用static这个词?

我知道静态函数由::调用而非静态函数由->调用,但真正的区别(为什么有时候我应该使用static我得不到)。据我所知,当我使用static时,我可以从另一个类中调用它。没有它 - 我不能。但我很确定我错了。

我认为这些信息对很多人来说真的很有帮助。感谢您抽出时间来解释它。

6 个答案:

答案 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'

更多信息:

http://php.net/manual/en/language.oop5.visibility.php

答案 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