매번 무작위 결과가 나올 수 있도록 왜 배열을 뒤섞 지 않을까요?셔플 기능이 PHP 클래스에서 작동하지 않는 이유는 무엇입니까?
class greeting {
public $greet = array('hi','hello');
shuffle($greet);
}
$hi = new greeting;
echo $hi->greet[1];
내 코드에 무슨 문제가 있습니까?
매번 무작위 결과가 나올 수 있도록 왜 배열을 뒤섞 지 않을까요?셔플 기능이 PHP 클래스에서 작동하지 않는 이유는 무엇입니까?
class greeting {
public $greet = array('hi','hello');
shuffle($greet);
}
$hi = new greeting;
echo $hi->greet[1];
내 코드에 무슨 문제가 있습니까?
셔플을 생성자 내부에 포함하도록 변경하면 잘 작동합니다.
class greeting {
public $greet = array('hi','hello');
function __construct(){
shuffle($this->greet);
}
}
모든 계산은 메소드 내부, 클래스 외부에서 수행 될 수 없습니다.
class greeting {
public $greet = array('hi','hello');
function __construct()
{
shuffle($this->greet);
}
}
$hi = new greeting;
echo $hi->greet[1];
클래스 블록에서는 상수, 속성 (고정 값과 함께) 및 메서드 만 정의 할 수 있습니다. 그 블록에 코드를 넣을 수는 없으며, 코드는 메소드 (AKA 함수) 내부에만 배치 할 수 있습니다.
왜 코드를 해당 블록에 배치 할 수 없습니까? 그걸 정리 해줘서 고마워. – Aaron
클래스 정의는 코드를 실행하지 않아야하기 때문에 클래스 정의는 해당 구성 요소를 정의하는 것입니다. 메소드 내에서 코드가 실행됩니다. 객체를 만들 때 실행할 코드가 필요하면 @laurencek 제안과 같이 생성자에 코드를 넣으십시오. –
또한 생성자에 넣은 후에도 여전히 * 보이지 않을 수도 있지만주의해야합니다. 배열에 2 개의 항목 만 있고 동일한 원래 순서로 섞여 있기 때문입니다. –
솔루션을 제공해 주셔서 감사합니다. 설명을 통해 왜 그런 식으로 끝내야하는지 더 잘 이해할 수 있습니다. – Aaron
@Matthew 코드가 클래스에서 실행되는 것은 반드시 메소드 내에 있어야합니다. '__construct'는 객체 생성시 호출되는 메소드의 이름입니다. 자세한 내용은 OOP의 PHP 매뉴얼 섹션을 확인하는 것이 좋습니다. – mfonda