가능한 중복 : 방법으로 다음의 클래스 내에 함수에서 전역 변수에 액세스 할 수 그것은 나쁜 프로그래밍 (PHP) 연습
[PHP] global in functions나쁜 프로그래밍 습관입니까?
인가?
class test{
function a(){
global $myvar;
..
}
function b(){
global $myvar;
..
}
}
감사합니다.
가능한 중복 : 방법으로 다음의 클래스 내에 함수에서 전역 변수에 액세스 할 수 그것은 나쁜 프로그래밍 (PHP) 연습
[PHP] global in functions나쁜 프로그래밍 습관입니까?
인가?
class test{
function a(){
global $myvar;
..
}
function b(){
global $myvar;
..
}
}
감사합니다.
우아한 것은 아닙니다. 생성자 내부에 해당 var를 전달하고 $this->var
과 함께 모든 함수에 사용할 클래스 내부에 private $var
에 저장해야합니다.
$myUnicorn = "Pink";
class Unicorn {
private $currentUnicorn;
public function __construct($current) {
$this->currentUnicorn = $current;
}
public function echoIt() {
echo $this->currentUnicorn;
}
public function killIt() {
unset($this->currentUnicorn); // :(
}
}
$u = new Unicorn($myUnicorn);
$u->killIt();
제 생각에는 그렇습니다. 생성자를 사용하여 전역 변수를 메서드에 항상 "게시"할 수 있으며 필드를 통해 링크를 유지할 수 있습니다.
필자의 관점에서 네가 사용했던 것과 같은 좋은 습관은 아니다. 이것을 다음과 같이 사용할 수 있습니다
class test{
private $myVar;
function __construct($myVar)
{
$this->myVar = $myVar;
}
function a(){
echo $this->myvar;
..
}
}
class test{
private $myVar;
function __construct()
{
global $myVar;
$this->myVar = $myVar;
}
function a(){
echo $this->myvar;
..
}
}
적극적으로해야하지 않는 한 그런 식으로해서는 안됩니다. 이해하기가 더 좋은 방법이 있다면 사용하십시오. 예를 들어, 어떤 사람들은 설정 변수에 접근하기 위해 이것을 사용하지만 더 좋은 방법은 define()
문장이나 정적 클래스와 파일을 사용하는 것입니다.
TL; DR - 필요한 경우에만 수행하십시오. 그렇지 않으면하지 마십시오.
IMO 매우 나쁨. 클래스를 외부 변수에 의존하게 만듭니다. 이 변수가없는 컨텍스트에서 인스턴스화 된 객체는 작동하지 않습니다.
변수를 클래스 생성자에 전달하십시오. 이 방법은 매개 변수가 제공된 경우에만 객체를 인스턴스화 할 수 있습니다.
예를 들어서 고맙습니다. –