PHP 5: 지속 vs 정적
에서는 PHP 5를 사용하는 것과 가 있습니까?const
★★★★★★★★★★★★★★★★★」static
각각언 ?제 ?? ???? and and and 、 and and 、 。public
,protected
★★★★★★★★★★★★★★★★★」private
아 - 아, 맞다?
클래스의 컨텍스트에서 정적 변수는 클래스 범위(개체가 아님)에 있지만, 상수와는 달리 값을 변경할 수 있습니다.
class ClassName {
static $my_var = 10; /* defaults to public unless otherwise specified */
const MY_CONST = 5;
}
echo ClassName::$my_var; // returns 10
echo ClassName::MY_CONST; // returns 5
ClassName::$my_var = 20; // now equals 20
ClassName::MY_CONST = 20; // error! won't work.
public, protected, private는 const(항상 퍼블릭)라는 점에서 관계가 없습니다.이것들은 스태틱 변수를 포함한 클래스 변수에만 도움이 됩니다.
- 퍼블릭 스태틱 변수에는 ClassName을 통해 어디서나 액세스할 수 있습니다.:$syslog.
- 보호된 정적 변수는 ClassName을 통해 정의 클래스 또는 확장 클래스를 통해 액세스할 수 있습니다.:$syslog.
- 프라이빗 스태틱 변수에는 ClassName 경유로 정의되는 클래스만 액세스할 수 있습니다.:$syslog.
편집: PHP 7.1.0에서는 클래스 상수의 가시성을 지정하는 지원이 도입되었습니다.
마지막으로 해야 할 점은 항상 정적이고 공개적이라는 것입니다.즉, 다음과 같이 클래스 내에서 const에 액세스할 수 있습니다.
class MyClass
{
const MYCONST = true;
public function test()
{
echo self::MYCONST;
}
}
클래스 밖에서 다음과 같이 액세스합니다.
echo MyClass::MYCONST;
상수는 상수일 뿐입니다. 즉, 선언 후에는 값을 변경할 수 없습니다.
정적 변수는 클래스의 인스턴스를 만들지 않고도 액세스할 수 있으므로 클래스의 모든 인스턴스에서 공유됩니다.
또한 함수에는 (함수의 첫 번째 실행 시)1회만 선언되어 함수 호출 간에 값을 저장할 수 있는 스태틱로컬 변수가 존재할 수 있습니다.예를 들어 다음과 같습니다.
function foo()
{
static $numOfCalls = 0;
$numOfCalls++;
print("this function has been executed " . $numOfCalls . " times");
}
때은 상수와 변수를 다른 로 구분하는 방법입니다.self
★★★★★★★★★★★★★★★★★」static
이 어떤 것에 을 보여 줍니다.
class Person
{
static $type = 'person';
const TYPE = 'person';
static public function getType(){
var_dump(self::TYPE);
var_dump(static::TYPE);
var_dump(self::$type);
var_dump(static::$type);
}
}
class Pirate extends Person
{
static $type = 'pirate';
const TYPE = 'pirate';
}
그리고 다음 작업을 수행합니다.
$pirate = new Pirate();
$pirate::getType();
또는 다음과 같이 입력합니다.
Pirate::getType();
출력:
string(6) "person"
string(6) "pirate"
string(6) "person"
string(6) "pirate"
말하면, 「 」입니다.self::
이 경우는, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」, 「」를 참조해 주세요.Person
에 비해 superclass)에 대응static::
는 실행 시 이 이 "는 "속성과 상수에 액세스합니다").Pirate
★★★★★★★★★★★★★★★★★★)
최신 스태틱바인딩에 대한 자세한 내용은 php.net를 참조하십시오.
그리고 여기와 여기 또 다른 질문의 정답을 확인해 보세요.
클래스 메서드 또는 속성을 static으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다.
클래스 상수는 일반 상수와 같기 때문에 실행 시 변경할 수 없습니다.이것이 당신이 const를 사용하는 유일한 이유이기도 합니다.
private, public 및 protected는 누가 어떤 파라미터/메서드에 액세스할 수 있는지를 나타내는 액세스 한정자입니다.
Public은 다른 모든 객체가 액세스됨을 의미합니다.Private는 인스턴스화된 클래스만 액세스할 수 있음을 의미합니다.보호됨은 인스턴스화된 클래스 및 파생된 클래스에 액세스할 수 있음을 의미합니다.
정적 멤버, 상수 변수 및 액세스 수식어(프라이빗, 퍼블릭 및 프로텍트)에 대해 지금까지 배웠습니다.상수
정의.
이름처럼 상수 변수의 값은 변경할 수 없습니다.상수는 $ 기호를 사용하여 선언하거나 사용하지 않는다는 점에서 일반 변수와 다릅니다.
값은 상수 표현식이어야 합니다.변수, 속성, 수학 연산의 결과, 함수 호출 등이 아닙니다.
참고: 변수 값은 키워드(예: self, parent, static)가 될 수 없습니다.
php에서 상수 선언
<?php
class constantExample{
const CONSTANT = 'constant value'; //constant
}
?>
Constant의 범위는 글로벌하며 self 키워드를 사용하여 액세스할 수 있습니다.
<?php
class MyClass
{
const CONSTANT = 'constant value';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n"; // As of PHP 5.3.0
?>
스태틱
정의.
static 키워드는 클래스, 멤버 함수 또는 변수를 선언하기 위해 사용할 수 있습니다.글로벌 클래스의 스태틱멤버에는 self 키워드를 사용하여 접근할 수도 있습니다.클래스 속성 또는 메서드를 스태틱으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다.static으로 선언된 속성은 인스턴스화된 클래스 개체로 액세스할 수 없습니다(단, 정적 메서드는 액세스할 수 있음).가시성 선언(public, private, protected)이 사용되지 않으면 속성 또는 메서드는 public으로 선언된 것으로 간주됩니다.정적 메서드는 생성된 객체의 인스턴스 없이 호출할 수 있기 때문입니다.
주의: 의사 변수 $this는 static으로 선언된 메서드 내부에서는 사용할 수 없습니다.화살표 연산자 ->를 사용하여 객체를 통해 정적 속성에 액세스할 수 없습니다.
PHP 5.3.0에서는 변수를 사용하여 클래스를 참조할 수 있습니다.> 변수 값은 키워드(self, parent, static 등)가 될 수 없습니다.
스태틱 속성 예시
<?php
class Foo
{
public static $my_static = 'foo'; //static variable
public static function staticValue() { //static function example
return self::$my_static; //return the static variable declared globally
}
}
?>
정적 속성 및 함수 액세스 예제
<?php
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
퍼블릭, 프라이빗, 프로텍트(A.K.)액세스 수식자)
다음의 정의를 읽기 전에, 이 「Encapsulation」(캡슐화)에 관한 문서를 참조해 주세요.개념을 좀 더 깊게 이해하는 데 도움이 될 것이다.
정의.
private, public 및 protected 키워드를 사용하여 클래스 내 멤버에 대한 접근을 제어할 수 있습니다.공개로 선언된 클래스 구성원은 어디에서나 액세스할 수 있습니다.보호되었다고 선언된 구성원은 클래스 자체 내에서만 액세스할 수 있으며 상속된 클래스와 상위 클래스에서만 액세스할 수 있습니다.비공개로 선언된 멤버는 멤버를 정의하는 클래스에서만 액세스할 수 있습니다.
예
<?php
class Example{
public $variable = 'value'; // variable declared as public
protected $variable = 'value' //variable declared as protected
private $variable = 'value' //variable declared as private
public function functionName() { //public function
//statements
}
protected function functionName() { //protected function
//statements
}
private function functionName() { //private function
//statements
}
}
?>
공용, 개인 및 보호된 구성원에 대한 액세스 예제
공용 변수는 클래스 외부 또는 클래스 내부에서 액세스 및 수정할 수 있습니다.그러나 개인 및 보호 변수와 함수는 클래스 내부에서만 액세스할 수 있습니다. 클래스 외부에서 보호됨 또는 공용 구성원의 값은 수정할 수 없습니다.
<?php
class Example{
public $pbVariable = 'value';
protected $protVariable = 'value';
private $privVariable = 'value';
public function publicFun(){
echo $this->$pbVariable; //public variable
echo $this->$protVariable; //protected variable
echo $this->privVariable; //private variable
}
private function PrivateFun(){
//some statements
}
protected function ProtectedFun(){
//some statements
}
}
$inst = new Example();
$inst->pbVariable = 'AnotherVariable'; //public variable modifed from outside
echo $inst->pbVariable; //print the value of the public variable
$inst->protVariable = 'var'; //you can't do this with protected variable
echo $inst->privVariable; // This statement won't work , because variable is limited to private
$inst->publicFun(); // this will print the values inside the function, Because the function is declared as a public function
$inst->PrivateFun(); //this one won't work (private)
$inst->ProtectedFun(); //this one won't work as well (protected)
?>
자세한 내용은 Visibility Php Doc에 대한 이 php 문서를 참조하십시오.
참고 자료 : php.net
컨셉을 이해하셨으면 좋겠습니다.읽어주셔서 감사합니다:) :) 좋은 하루 보내세요.
@Matt의 훌륭한 답변을 요약하면 다음과 같습니다.
필요한 속성을 변경하지 않으면 상수가 적절한 선택입니다.
필요한 속성을 변경할 수 있는 경우 대신 static을 사용합니다.
예:
class User{
private static $PASSWORD_SALT = "ASD!@~#asd1";
...
}
class Product{
const INTEREST = 0.10;
...
}
편집: PHP 7.1.0에서는 클래스 상수의 가시성을 지정하는 지원이 도입되었습니다.
언급URL : https://stackoverflow.com/questions/1685922/php-5-const-vs-static
'IT' 카테고리의 다른 글
Chrome Dev Tools - javascript 수정 및 새로고침 (0) | 2023.01.15 |
---|---|
명령줄 mac에서 mysql에 액세스할 수 없습니다. (0) | 2023.01.15 |
링크에 GET 대신 POST를 사용하다 (0) | 2023.01.15 |
PHP 구문 질문:물음표와 콜론은 무슨 뜻입니까? (0) | 2023.01.15 |
기존 값이 있는 Vue 형식 입력 바인딩 (0) | 2023.01.15 |