PHP 함수와 객체, 클래스
◆ 코드 재활용의 장점
1. 비용의 측면 : 만드는 시간보다는 유지 보수, 검사 및 문서화 작업에 더 많은 시간이 소요된다.
2. 신뢰의 측면 : 어떤 코드 블록이 사용되고 있다면, 그 코드 블록은 믿을 만 하다.
3. 일관성의 측면 : 코드를 재활용할 시에 일관성을 유지할 수 있다.
◆ require()와 include() 사용하기
-> 두 함수는 지금 스크립트에 다른 파일(php문,일반 문장,html 태그, 함수, 클래스 등)을 불러온다.
1. require() : 실패 시 치명적 오류 발생
2. include() : 가벼운 경고를 낸다.
ex) require(‘@@@.php’);
◆ 함수 호출하기
함수명();
◆ 함수 만들기
function 함수명() { 명령문; }
◆ return 키워드 : 반환
return 문은 함수 실행을 끝낸다. 모두 실행되었거나, 실행되기 이전에도 함수 실행을 종료되며 반환된다.
<?php
function my_function()
{
return "Hi";
}
?>
◆ 파라미터 parameter : 함수의 인수
function 함수명(parameter) { 명령문; }
<?php
function sum($num1, $num2)
{
return $num1+$num2;
}
$a = 1;
$b = 2;
$x = sum($a,$b);
echo $x;
?>
함수의 인자로 넘겨주는 세 가지 방법
1. 값에 의한 인자 전달 (pass-by-value)
기본적인 방법으로 함수를 호출할 때 인자를 직접 값으로 전달하는 것을 말한다.
함수 안에서 값을 수정해도 값 자체가 변경되지 않는다.
<?php
function swap($num1, $num2)
{
$temp = $num1;
$num1 = $num2;
$num2 = $temp;
}
$a = 1;
$b = 2;
echo "$num1, $num2";
swap($a,$b);
echo "$num1, $num2";
?>
2. 참조에 의한 인자 전달 (pass-by-reference)
함수에 원본을 전달해주는 것과 같다. 함수 내에서 값을 수정하면 원본의 내용까지 수정된다.
인자 앞에 &(엠퍼센트) 기호를 붙인다.
<?php
function swap(&$num1, &$num2)
{
$temp = $num1;
$num1 = $num2;
$num2 = $temp;
}
$a = 1;
$b = 2;
echo "$num1, $num2";
swap($a,$b);
echo "$num1, $num2";
?>
3. 기본 인자 값
함수의 인자에 기본 값(default)을 설정하는 것이다. 인자가 넘어온다면 기본 값은 무시된다.
<?php
function my_blog($url = "http://jungchul.tistory.com")
{
return "Blog address : $url<BR>";
}
echo my_blog();
echo my_blog("http//smartwheel.kr");
?>
◆ 함수 범위
1. 함수 안에서 선언된 변수는 선언된 시점 부터, 함수의 끝까지 사용할 수 있으며, 이런 변수는 지역변수
2. 함수 밖에서 선언된 변수는 함수 안에서 사용할 수 없다. 이러한 변수를 전역변수, 범위는 전역범위
3. 특별한 수퍼글로벌 변수는 함수 안팎에서 사용 가능하다.
4. 함수 안에서 global를 붙여서 변수를 선언한 변수는 전역 범위를 가진다.
◆ 객체 (object)
객체 지향 프로그래밍(OOP)이나 설계에서, 데이터(실체)와 그 데이터에 관련되는 동작(절차, 방법, 기능)
을 모두 포함한 개념.
1. 속성(attribute) : 객체와 관련된 특성이나 변수
2. 연산(operation) : 객체 자신을 바꾸거나, 외부적 효과가 나타나는 메소드(method), 동작(action),
함수 등을 말한다.
◆ 다형성(polymorphism)
객체의 특징보다는 동작의 특징으로서, 작성코드를 수정하지 않고 다양한 자료형의 객체를
처리하도록 하는 기법
◆ 캡슐화(encapsulation)
객체의 자료와 행위를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것.
◆ 상속(inheritance)
객체(object)의 새로운 클래스(class)를 정의할 때 상위 또는 부모 클래스의 데이터 구조와 메소드
(method)를 그대로 이어받을 수 있는 개념으로 객체 지향의 가장 큰 장점인 소프트웨어 재사용을
지원할 수 있다.
◆ 클래스의 구조
class classname { }
<?php
class human {
public $name; // 속성
public $age;
function eating() {} // 메소드
}
?>
◆ 생성자 constructor
객체가 호출되어 초기값을 주거나, 객체에 필요한 다른 객체를 만드는 등 초기화 작업을 수행한다.
자동 호출되며, 직접 호출도 가능하다.
function __construct() {}
◆ 소멸자 destructor
클래스가 없어지기 전에 해야 하는 일들, 참조를 지우는 등 소멸자에서 한다.
소멸자는 파라미터를 가지지 못한다.
function __destruct() {}
◆ 인스턴스 생성하기
클래스를 선언하고 난 후, 클래스의 특정한 개체를 만들기 위해 인스턴스를 생성한다.
new 키워드 사용
<?php
class human {
public $name; // 속성
public $age;
function eating() {} // 메소드
}
$jungchul = new human();
?>
◆ 캡슐화를 통한 속성 접근
1. __get() : 외부에서 속성 값 가져오기
function __get($name) { return $this->$name; }
2. __set() : 외부에서 속성 값 변경하기
function __set($name,$value) { $this->name = $value; }
<?php
class human {
public $name; // 속성
public $age;
function eating() {} // 메소드
function __get($name) { return $this->$name; }
function __set($name,$value) { $this->name = $value; }
}
$jungchul = new human();
?>
◆ 접근 제어하기
기본적으로 접근 제한자를 지정하지 않을 시 defaul로 public 변수로 선언된다.
1. public : 클래스 안, 밖에서 모두 접근 가능하다.
2. private : 클래스 내부에서만 접근 가능하여, 속성 접근 시 위의 __get(), __set()로 접근한다.
* 상속된 클래스에서도 사용 불가
3. protected : 클래스 내부에서만 접근 가능하며, 상속된 하위 클래스에서도 접근 가능
◆ 클래스 연산 호출하기 ( 메소드 호출하기 )
<?php
class human {
public $name; // 속성
public $age;
function eating() {} // 메소드
function __get($name) { return $this->$name; }
function __set($name,$value) { $this->name = $value; }
}
$jungchul = new human();
$jungchul.eating();
?>
◆ 상속하기
extends 키워드 사용
class human extends man { }
◆ 오버라이딩 overriding
속성과 연산에 대해 다른 용도로 재선언 하는 것
class A {
public $attribute = “default value”;
function operation() { echo “hello”; }
}
class B extends A{
public $attribute = “different value”;
function operation() { echo “bye”; } }
◆ final 키워드를 사용하여 상속과 오버라이딩 막기
final class A {} // 상속을 막는다.
class A {
final function operation() {} // 오버로딩을 막는다.
}
◆ php는 클래스에서 다중 상속을 지원하지 않는다.
◆ 인터페이스
다중 상속이 가능하다.
인터페이스 생성 시 키워드 interface 사용, 인터페이스를 상속 시 키워드 implements 사용
interface Displayable { function display(); }
class Pen implements Displayable {
function display() {}
}
◆클래스 당 상수
상수는 키워드 const를 사용핟나.
클래스를 생성하지 않아도 사용할 수 있다. 접근 ‘::’연산자를 이용하여 접근한다.
class Math {
const pi = 3.14159;
}
echo Math::pi;
◆정적 메소드 구현하기
정적을 구현하기 위해 키워드 static을 사용한다.
static을 사용하면 클래스를 생성하지 않고도 호출할 수 있다.
class Math {
static function squared($input) { return $input*$input; }
}
echo Math::squared(8);
◆ 클래스 타입 검사
객체에 대한 클래스의 타입을 검사할 때 키워드 instanceof 를 사용한다.
특정 클래스의 인스턴스인지, 클래스를 상속 받았는지, 인터페이스를 구현 하였는 지 알 수 있다.
($b instanceof B) -> true를 반환한다.
◆ 객체 복사
현재 존재하는 객체는 키워드 clone 으로 복사할 수 있다.
동일한 클래스, 동일한 속성 값을 가지는 복사본을 만들 수 있다.
$c = clone $b;
◆ 추상 클래스 사용하기
인스턴스를 만들 수 없는 추상 클래스와 프로토 타입은 가지고 있지 않은 추상 메소드를 만들 수 있다.
키워드 abstrac를 사용
추상 클래스나 추상 메소드는 하위 클래스에서 구현하고, 오버라이딩 해야한다.
'Web프로그래밍' 카테고리의 다른 글
PHP 파일 입출력 (0) | 2016.02.15 |
---|---|
PHP 예외 처리 Exception (0) | 2016.02.15 |
PHP 입력과 출력, include와 require (0) | 2016.02.15 |
PHP 제어문 반복문(if-else for while) (0) | 2016.02.15 |
PHP 문법 주석, 변수, 연산자 (0) | 2016.02.15 |