>  기사  >  백엔드 개발  >  PHP 클래스의 정적 호출과 인스턴스화된 호출의 차이점은 무엇입니까?

PHP 클래스의 정적 호출과 인스턴스화된 호출의 차이점은 무엇입니까?

烟雨青岚
烟雨青岚원래의
2020-06-30 15:58:383386검색

차이점은 다음과 같습니다. 1. 정적 메서드는 프로그램이 시작될 때 메모리를 생성하고 인스턴스 메서드는 프로그램이 실행되는 동안 메모리를 생성합니다. 2. 정적 메서드는 직접 호출할 수 있지만 인스턴스 메서드는 먼저 인스턴스를 생성하고 다음을 통해 메서드를 호출해야 합니다. 3. 정적 방법 메모리는 연속적이며 인스턴스는 개별 공간에 적용되므로 정적 방법만큼 빠르지 않으며 정적 메모리가 제한됩니다.

PHP 클래스의 정적 호출과 인스턴스화된 호출의 차이점은 무엇입니까?

정적 메서드는 하나만 있습니다. 아무리 호출해도 공유됩니다. 객체라는 개념이 없으므로 정적 메서드에서 $this 호출을 사용할 수 없습니다. 호출하려면 자체 클래스

의 인스턴스화만 할 수 있습니다. 각 인스턴스화는 객체이며 여러 객체를 갖습니다.

예를 사용하여

<?php
Error_reporting(E_ALL|E_STRICT);
 
class A{
    
    public function bar(){
        echo &#39;bar&#39;.PHP_EOL;
    }
    public static function foo(){
        echo &#39;foo&#39;.PHP_EOL;
    }
}
 
A::bar();//会报错
A::foo();//正确
$obj = new A();
$obj -> foo();//正确
/* 
  bar()是一个非静态方法,应该由对象来调用,但用静态来调用此方法也可以执行,而严格状态下,此方法会执行,同时报错, 
  Strict Standards: Non-static method Human::easyeat() should not be called statically in........
  但是实例化的类是可以调用静态方法的。
*/
<?php
 
class A{
    public $name = &#39;kangbazi&#39;;
 
    public function bar(){
        echo &#39;bar&#39;.PHP_EOL;
    }
    public static function foo(){
        echo self::$name.PHP_EOL;//报错
    }
}
 
A::foo();
 
/*
    静态方法不能调用非静态属性 。不能使用self::调用非静态属性。
*/

을 이해하고 간략하게 요약해 보겠습니다.

가장 큰 차이점은 메모리입니다.

정적 메서드는 프로그램이 시작될 때 메모리를 생성하고, 인스턴스 메서드는 프로그램이 실행되는 동안 메모리를 생성합니다.

그래서 정적 메서드는 직접 호출할 수 있으며, 인스턴스 메서드는 먼저 인스턴스를 생성하고, 인스턴스를 통해 메서드를 호출해야 합니다, 정적 메소드는 매우 빠르지만 너무 많으면 메모리를 차지합니다.

모든 언어는 메모리와 디스크에서 작동합니다. 객체 지향인지 아닌지는 단지 소프트웨어 계층의 문제일 뿐입니다. 하지만 구현 방법이 다릅니다.

정적 메모리는 프로그램 시작 시 생성되기 때문에 연속적이며 인스턴스는 이산적인 공간에 적용되므로 당연히 정적 방법만큼 빠르지는 않지만,

그리고 정적 메모리는 제한되어 있습니다 , 너무 많이 프로그램이 시작되지 않습니다.

추천 튜토리얼: "php 튜토리얼"

위 내용은 PHP 클래스의 정적 호출과 인스턴스화된 호출의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.