일부 문자열 입력 ($age
)에 대해 "나이가 젊다", "십대입니다"및 "나이가 들었습니다"를 다시 입력해야하는 것은 입력 한 나이에 따라 다릅니다.OOP 클래스 및 인스턴스
그것으로 문제는, 내 코드를 잘못 든, 내가 PHP
에서 OOP
와 시작 부분에, 그래서 당신은 몇 가지 설명과 함께 나를 도울 수 있다면, 내가
<form action="classvsinstance.php" method="get">
<input type="text" name="age" placeholder="age">
<input type="submit" value="submit">
</form>
감사하게 될 것입니다 것이다 클래스
$p = new Person($age);
를 인스턴스화
및
class Person{
public $age;
public function __construct($initialAge){
// Add some more code to run some checks on initialAge
if($initialAge < 0){
$age = 0;
print('Age is not valid, setting age to 0.');
} else {
$initialAge = $age;
}
}
public function amIOld(){
if($age < 13){
print("You are young.");
}elseif(($age>=13) && ($age < 18)){
print("You are a teenager.");
}else{
print("You are old");
}
public function yearPasses(){
// Increment the age of the person in here
$age++;
}
}
$age = $_GET['age'];
echo "Your age is " . $age . ".<br><br>";
방법에게 나가 형태에 넣어 모든 번호에 대한
$ -> amIOld();
echo "\n";
모든 출력을 호출
는, "당신은 젊은이다"입니다.
나는 왜 그런지 잘 모르겠다. 나는 여기서 잘못하고있다. 좋은 방법을 제외한 모든 방법을 시도했다.
클래스 내부에는'$ age' 대신'$ this-> age'가 사용됩니다! –
각 클래스 메소드에서 로컬 인스턴스보다는'$ age' 클래스를 참조해야합니다. $ this-> age'를 사용하면됩니다. * $ age와 동일하지 않습니다. 당신의 방법. 'yearPasses'의'$ age'는 항상 그 함수/메소드가 끝나자 마자 그 값을 잊어 버리기 때문에 항상 0 -> 1이 될 것입니다. 'amIOld()'와 동일하다. * class * 값'$ this-> age'을 참조하지 않는다. – Martin
"정의되지 않은 변수"오류를보고하지 않으므로 아마도 display_errors 및 error_reporting이 비활성화되어있을 것이다. 그들은 devel/debug 시스템에서 결코 벗어나서는 안됩니다. –