이번엔 클래스를 생성하고 그 클래스를 통한 인스턴스를 생성해보겠습니다.
class MyFileObject1{
function isFile(){
return false;
}
}
$file = new MyFileObject1();
var_dump($file->isFile());
MyFileObject1 이라는 클래스를 생성하였고 그 안에 isFile 이라는 메소드를 만들었습니다.
isFile 메소드는 항상 false를 리턴합니다.
해당 클래스를 기반으로 하는 $file 이라는 인스턴스를 생성했습니다.
그리고 isFile 이라는 메소드를 호출하여 그 값에 대한 정보를 var_dump 로 출력합니다.
클래스를 생성할 땐 다음과 같이 생성합니다.
class 클래스명{}
중괄호 안에는 클래스에 대한 내용물이 들어갑니다.
어떤 기능을 하는 함수, 객체지향 관점에서는 메소드라고 부르는데 메소드를 만들 땐 다음과 같이 생성합니다.
function 메소드명{}
// 메소드=함수와 같은 기능. 함수라고 해도 무방
이렇게 기본적인 클래스와 메소드를 만들고 해당 클래스를 통한 인스턴스를 생성하여 메소드를 호출해보았습니다.
이번엔 php 내장함수를 이용한 메소드를 만들고 클래스를 만들어 보겠습니다.
class MyFileObject2{
function isFile(){
return is_file($this->filename);
}
}
$file1 = new MyFileObject2();
$file1->filename = 'test1.php';
var_dump($file1->isFile());
var_dump($file1->filename);
$file2 = new MyFileObject2();
$file2->filename = 'test2.php';
var_dump($file2->isFile());
var_dump($file2->filename);
MyFileObject2 라는 클래스를 만들었습니다.
그 안에 내용물에 isFile 이라는 메소드를 생성했고 그 메소드는 php 내장함수인 is_file을 이용했습니다.
여기서 $this->filename 이라는 것을 사용했습니다.
$this 에 대해서 이해하는데 너무 오래걸렸고 구글링을 하고 유튜브를 봐도 이해가 잘 안되었었는데 제가 이해한대로 적어보겠습니다.
클래스를 통해 인스턴스화 한 구체적인 인스턴스에서 변수를 사용하는 것은
$instance1->test
//인스턴스->변수
위와 같이 instance1 이라는 인스턴스에서 test라는 변수를 사용합니다.
$this 는 인스턴스 자체를 가리킵니다.
$instance1 = new myclass();
$instance2 = new myclass();
$instance3 = new myclass();
...
$instance1->test
$instance2->test
$instance3->test
myclass 라는 클래스로 여러개의 인스턴스를 생성했고, 각각의 인스턴스에서 변수를 사용하는 모양입니다.
myclass 라는 클래스 내에서 $this->test 형식으로 코드를 작성해야 위와 같이 사용할 수 있습니다.
그리고 저 test라는 변수는 각각의 인스턴스 안에서만 유효합니다.
$instance1->test = "1";
$instance2->test = "2";
$instance3->test = "3";
instance1 에서의 test값은 1이되고, instance2 에서의 test값은 2, instance3 의 test는 3 이 됩니다.
$this는 php의 법칙이고 약속된 방식입니다.
다시 위의 코드 설명으로 돌아갑니다.
class MyFileObject2{
function isFile(){
return is_file($this->filename);
}
}
$file1 = new MyFileObject2();
$file1->filename = 'test1.php';
var_dump($file1->isFile());
var_dump($file1->filename);
$file2 = new MyFileObject2();
$file2->filename = 'test2.php';
var_dump($file2->isFile());
var_dump($file2->filename);
is_file() 은 괄호안의 파일이 file이 맞다면 true 아니면 false를 리턴하는 php 내장함수입니다.
is_file($this->filename) 은 인스턴스가 사용한 filename이 파일인지 아닌지 확인하는 기능이 됩니다.
이 기능은 MyFileObject2 라는 클래스안에서 isFile() 이라는 메소드로 정의되었습니다.
다음으로 MyFileObject2 클래스를 통해 file1 인스턴스를 생성했고 filename 변수의 값을 'test1.php' 로 사용했습니다.
마찬가지로 밑의 file2 인스턴스도 filename 변수를 사용했고 그 값은 'test2.php'가 됩니다.
위에서 언급했다시피 filename 변수값은 사용한 인스턴스 내에서만 유효한 값이 됩니다.
이제 위에 작성한 코드들을 종합하여 웹에 출력해보겠습니다.
<?php
class MyFileObject1{
function isFile(){
return false;
}
}
$file = new MyFileObject1();
var_dump($file->isFile());
echo "<br>";
echo "<br>";
class MyFileObject2{
function isFile(){
return is_file($this->filename);
}
}
$file1 = new MyFileObject2();
$file1->filename = 'test1.php';
var_dump($file1->isFile());
echo "<br>";
var_dump($file1->filename);
echo "<br>";
echo "<br>";
$file2 = new MyFileObject2();
$file2->filename = 'test2.php';
var_dump($file2->isFile());
echo "<br>";
var_dump($file2->filename);
?>
첫번째는 isFile이라는 메소드가 항상 false를 리턴하므로 false값이 출력되었고,
file1 인스턴스의 filename 변수는 test1.php 이 되며 파일이 존재하므로 true가 출력,
file2 인스턴스의 filename 변수는 test2.php 이 되며 파일이 존재하지 않으므로 false가 출력된 모습입니다.
'php' 카테고리의 다른 글
클래스 및 객체(6) (0) | 2021.08.18 |
---|---|
클래스 및 객체(5) (0) | 2021.08.17 |
클래스 및 객체(3) (0) | 2021.08.05 |
클래스 및 객체(2) (0) | 2021.08.04 |
클래스 및 객체(1) (0) | 2021.08.03 |