method
와 property
로 구성된다.->
키워드를 이용하여 접근한다.class A
{
public $name = 'Hyeonseop';
public function foo() {
return $this->name;
}
}
function bar(A $a) {
$a->name = 'Youngha';
}
$a = new A();
$a->name; //'Hyeonseop'
bar($a);
$a->name; //'Youngha'
$a = new A()
에서 $a
는 참조형으로 객체를 전달 받는다.$a
를 불러서 수정을 하게되면 진짜 객체 내용이 수정된다. (위 예시 코드 참고)class B extends A
{
}
$b = new B();
$b->foo(); //A에게 foo라는 method를 상속받았기 때문에 가능.
$b->name; //A에게 name이라는 property를 상속받았기 때문에 가능.
function bar(A $a) {
return $a->foo();
}
$a = new A();
$b = new B();
bar($a);
bar($b); //이것이 가능하다!
$b instanceof A; // true
$a instanceof B; // false
new self();
new static();
new parent();
class C extends A
{
public function foo()
{
return new self(); // 1
return new static(); // 2
return new parent(); // 3
}
}
class D extends C
{
}
$d = new D();
$d->foo() // 각각 1, 2, 3을 하였을 때, method foo의 return값이 어떻게 바뀔까?
new self()
의 경우 class C
객체를 리턴new static()
의 경우 class D
객체를 리턴new parent()
의 경우 class A
객체를 리턴class E
{
const NAME = 'Hyeonseop';
public function getConstant()
{
return self::MESSAGE;
}
public function who()
{
return __CLASS__;
}
}
$e = new E();
$e->getConstant(); //'Hyeonseop'
E::NAME //'Hyeonseop'
$e->who(); //'E'
E::__CLASS__ // 틀린 문법.
constant의 경우 기존 property 변수와는 다르게 $
를 쓰지 않는다.
class 내부에서 정의한 constant는 ::
(범위 지정 연산자) 를 통해서 접근가능하다.
Magic constants (__CLASS__
등 )은 전역 스코프이며 불리는 위치에 따라 값이 다르다.
::
을 통해서 접근 X$a = new class {};
$b = new class{public $foo = 'hi';};
$b->foo; //'hi'
new
키워드를 통해 바로 object를 만들 수 있음.class A
{
public $name = 'Hyeonseop';
public function foo()
{
return $this->name;
}
}
class B
{
public function createObject()
{
return new class extends A{};
}
}
$b = new B();
echo $b->createObject()->foo(); //'Hyeonseop'
다른 언어에서와 마찬가지로 php에서도 static
키워드는 변수의 scope가 끝나도 값을 유지하게 할 때 사용한다.
class A
{
public static $name = 'Hyeonseop';
public static function getName()
{
return self::$name;
}
}
echo A::getName(); // 'Hyeonseop'
echo A::$name; // 'Hyeonseop'
$a = new A();
echo $a->getName(); // 'Hyeonseop'
echo $a->name; // 오류!!
객체를 생성하지 않고 class를 통한 접근
객체를 통한 접근
정적 메소드에서는 $this 변수를 사용 불가.
self::
키워드를 통해 property에 접근.바인딩(binding)이 name(함수 혹은 변수)과 실제 값이 위치한 메모리를 연결하는 것을 말한다.
보통 binding은 아래 두 가지 종류가 있다.
그런데 php (version 5.3.0 부터)는 정적바인딩과 동적바인딩의 중간의 늦은 정적 바인딩 (Late Static Binding)을 제공한다.
static::
키워드를 사용하며,
인프런에서 PHP 7+ 프로그래밍: 객체지향 강의를 보고있는데 이해가 안되는 부분이 여기에 작성되어있네요 감사합니다 잘 읽었습니다 : )