> 백엔드 개발 > PHP 튜토리얼 > PHP 정적 메소드와 비정적 메소드의 사용법 차이

PHP 정적 메소드와 비정적 메소드의 사용법 차이

怪我咯
풀어 주다: 2023-03-12 17:50:02
원래의
2460명이 탐색했습니다.

아래 편집기는 PHP의 정적 메서드와 비정적 메서드 간의 사용법 차이에 대한 간략한 분석을 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 편집기를 따라 살펴보겠습니다

PHP 프로그래밍에서 정적 키워드 는 클래스의 특정 인스턴스가 아닌 클래스와 관련된 속성 또는 메서드를 선언합니다. 따라서 이러한 유형의 속성 또는 메서드는 다음과 같습니다. "클래스 속성" 또는 "클래스 메서드"라고도 합니다.

액세스 제어 권한이 허용되는 경우 클래스 object를 만들 필요는 없지만 클래스 이름과 두 개의 콜론 "::"을 사용하여 직접 호출합니다.

static 키워드를 사용하여 변수와 메서드를 수정할 수 있습니다.

인스턴스화 없이 클래스의 정적 속성과 정적 메서드에 직접 액세스할 수 있습니다.

static의 속성 및 메서드는 정적 속성 및 메서드에만 액세스할 수 있으며 비정적 속성 및 메서드에는 액세스할 수 없습니다. 정적 속성과 메서드가 생성될 때 호출할 수 있는 이 클래스의 인스턴스가 아직 없을 수 있기 때문입니다.

정적 속성은 메모리에 복사본이 하나만 있고 모든 인스턴스에서 공유됩니다.

현재 클래스의 정적 멤버에 액세스하려면 self:: 키워드를 사용하세요.

클래스의 모든 인스턴스는 클래스의 정적 속성을 공유합니다.

즉, 메모리에 여러 인스턴스가 있더라도 정적 속성의 복사본은 하나만 있습니다.

예: 카운터 $count 속성을 설정하고 비공개 및 정적 수정을 설정합니다.

이런 방식으로 외부 세계는 $count 속성에 직접 접근할 수 없습니다. 프로그램을 실행한 결과에도 여러 인스턴스가 동일한 정적 $count 속성을 사용하고 있음이 표시됩니다.

<?php  
class user 
{  
 private static $count = 0 ; //记录所有用户的登录情况.  
 public function construct() {  
  self::$count = self::$count + 1;  
 }  
 public function getcount() {  
  return self::$count;  
 }  
 public function destruct() {  
  self::$count = self::$count - 1;  
 }  
}  
$user1 = new user();  
$user2 = new user();  
$user3 = new user();  
echo "now here have " . $user1->getcount() . " user";  
echo "<br />";  
unset($user3);  
echo "now here have " . $user1->getcount() . " user";  
?>
로그인 후 복사


두 번째, 정적 속성은 직접 호출됩니다.

정적 속성은 인스턴스화 없이 직접 사용할 수 있으며, 클래스가 생성되기 전에 직접 사용할 수 있습니다.

사용법:

클래스 이름:: 정적 속성 이름

<?php  
class math 
{  
 public static $pi = 3.14;  
}  
// 求一个半径3的园的面积。  
$r = 3;  
echo "半径是 $r 的面积是<br />";  
echo math::$pi * $r * $r;  
echo "<br /><br />";  
//这里我觉得 3.14 不够精确,我把它设置的更精确。  
math::$pi = 3.141592653589793;  
echo "半径是 $r 的面积是<br />";  
echo math::$pi * $r * $r;  
?>
로그인 후 복사

클래스가 생성되지 않으며 정적 속성을 직접 사용할 수 있습니다. 정적 속성은 언제 메모리에 생성되나요?

PHP에서 관련 정보를 보지 못했습니다.

설명을 위한 Java의 개념 인용도 보편적이어야 합니다. 클래스가 호출되면 정적 속성과 메서드가 생성됩니다.

세 가지 정적 메서드

정적 메서드는 클래스를 인스턴스화하지 않고도 직접 사용할 수 있습니다.

사용된 메소드는 클래스 이름:: 정적 메소드 이름

수학 계산을 수행하기 위해 이 수학 클래스를 계속 작성하세요.

최대값을 계산하는 방법을 설계하세요. 이는 수학적 연산이기 때문에 이 클래스를 인스턴스화할 필요가 없습니다. 이 메서드를 인수하여 사용할 수 있다면 훨씬 더 편리할 것입니다.

정적 메소드를 시연하기 위해 설계된 클래스입니다. PHP는 숫자 값을 비교하는 max() 함수를 제공합니다.

<?php  
class math 
{  
 public static function max($num1, $num2) {  
  return $num1 > $num2 ? $num1 : $num2;  
 }   
}  
$a = 99;  
$b = 88;  
echo "显示 $a 和 $b 中的最大值是";  
echo "<br />";  
echo math::max($a, $b);  
echo "<br />"; 
echo "<br />"; 
echo "<br />";  
$a = 99;  
$b = 100;  
echo "显示 $a 和 $b 中的最大值是";  
echo "<br />";  
echo math::max($a,$b);  
?>
로그인 후 복사

정적 메서드에서 정적 메서드를 호출하는 방법

첫 번째 예에서는 정적 메서드가 다른 정적 메서드를 호출할 때 self::를 사용합니다.

<?php  
// 实现最大值比较的math类。  
class math 
{  
 public static function max($num1, $num2) {  
  return $num1 > $num2 ? $num1 : $num2;  
 }  
 public static function max3($num1, $num2, $num3) {  
  $num1 = self::max($num1, $num2);  
  $num2 = self::max($num2, $num3);  
  $num1 = self::max($num1, $num2);    
  return $num1;  
 }  
}  
$a = 99;  
$b = 77;  
$c = 88;  
echo "显示 $a $b $c 中的最大值是";  
echo "<br />";  
echo math::max3($a, $b, $c);  
?>
로그인 후 복사

정적 메서드는 정적 속성을 호출합니다

self::를 사용하여 이 정적 속성을 호출합니다. 수업.

<?php  
//  
class circle 
{  
 public static $pi = 3.14;  
 public static function circleacreage($r) {  
  return $r * $r * self::$pi;  
 }  
}  
$r = 3;  
echo " 半径 $r 的圆的面积是 " . circle::circleacreage($r);  
?>
로그인 후 복사

정적 메서드는 비정적 속성을 호출할 수 없습니다. 비정적 속성은 self::를 사용하여 호출할 수 없습니다.

<?php  
// 这个方式是错误的  
class circle 
{  
 public $pi = 3.14;  
 public static function circleacreage($r) {  
  return $r * $r * self::pi;  
 }  
}  
$r = 3;  
echo " 半径 $r 的圆的面积是 " . circle::circleacreage($r);  
?>
로그인 후 복사

$this를 사용하여 비정적 속성의 값을 가져올 수도 없습니다.

정적 메서드는 비정적 메서드를 호출합니다.

PHP5에서는 $this 식별자를 정적 메서드에서 사용하여 비정적 메서드를 호출할 수 없습니다.

<?php 
// 实现最大值比较的math类。  
class math 
{   
 public function max($num1, $num2) {  
  echo "bad<br />";    
  return $num1 > $num2 ? $num1 : $num2;  
 }  
 public static function max3($num1, $num2, $num3) {  
  $num1 = $this->max($num1, $num2);  
  $num2 = $this->max($num2, $num3);  
  $num1 = $this->max($num1, $num2);    
  return $num1;  
 }  
}  
$a = 99;  
$b = 77;  
$c = 188;  
echo "显示 $a $b $c 中的最大值是";  
echo "<br />";  
echo math::max3($a, $b, $c); //同样的这个会报错 
?>
로그인 후 복사

클래스의 비정적 메서드가 self::에 의해 호출되면 시스템은 자동으로 이 메서드를 정적 메서드로 변환합니다.

아아아아

위 내용은 PHP 정적 메소드와 비정적 메소드의 사용법 차이의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿