'Class'에 해당되는 글 5건

  1. 2008/06/19 PHP 스코프 연산자(::)
  2. 2008/06/19 PHP 억세스권(접근권한) : Visibility
  3. 2008/06/19 PHP 오브젝트의 오토로딩
  4. 2008/06/19 PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5
  5. 2008/03/11 어드레스 클래스

PHP 스코프 연산자(::)

PHP/매뉴얼 번역 2008/06/19 17:59
스코프 연산자(::) Scope Resolution Operator (::)

스코프정의연산자 (Paamayim Nekudotayim 라고도 함) , 그냥 보이는 대로 부르면  더블콜론은 static, 정수(constant ) 그리고 오버라이드된 클래스의 멤버 , 메소드 에 접근 할 수 있도록 하는 토큰중에 하나이다. 
위의 아이템들을 클래스정의의 외부에서 참조할때 클래스의 이름을 사용하도록 한다.
 
PHP 5.3.0 이후부터는 변수를 이용하여 클래스를 참조할 수 있다. 변수의 값은 키워드를 지정할수 없다.  (예를 들어 self  또는  parentstatic 같은 ...)
왜 더블콜론에 Paamayim Nekudotayim 라는 이름을 붙였을까 ?
Zend Engine 0.5 (PHP 3 의 엔진) 을 작성할때 Zend 팀은 더블콜론의 이름을 이렇게 정하였다. 실은 더블콜론을 의미하는 히브루(Hebrew)어라고...
 
클래스정의 외부에서의 예

<?php
class MyClass
{
    const
CONST_VALUE = 'A constant value'
;
}

$classname = 'MyClass'
;
echo
$classname::CONST_VALUE;
// As of PHP 5.3.0

echo MyClass::CONST_VALUE
;
?>


두개의 특별한 키워드 self parent 가 클래스정의의 내부에서 멤버 또는 메소드를 억세스할때 사용된다.

클래스정의 내부에서의 예

<?php
class OtherClass extends MyClass
{
    public static
$my_static = 'static var';

    public static function
doubleColon() {
        echo
parent::CONST_VALUE . "\n";
        echo
self::$my_static . "\n";
    }
}

$classname = 'OtherClass';
echo
$classname::doubleColon(); // As of PHP 5.3.0

OtherClass::doubleColon();
?>


확장된 클래스가 부모클래스의 메소드의 정의를 오버라이드할때 PHP 는 부모클래스의 메소드를 호출하지 않는다. 부모클래스의 메소드를 호출할지 말지는 확장된 클래스에서 결정할 일이다. 컨스트럭터 및 디스트럭터 , 오버로드 그리고 매직메소드의 정의에도 적용된다.


부모클래스의 메소드 호출예

<?php
class MyClass
{
    protected function
myFunc() {
        echo
"MyClass::myFunc()\n";
    }
}

class
OtherClass extends MyClass
{
   
// Override parent's definition
   
public function myFunc()
    {
       
// But still call the parent function
       
parent::myFunc();
        echo
"OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>

원문링크 : http://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php

목차에
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5

'PHP > 매뉴얼 번역' 카테고리의 다른 글

PHP 오버로드  (0) 2008/06/20
PHP 오브젝트 인터페이스  (0) 2008/06/20
PHP 클래스의 추상화  (0) 2008/06/19
PHP 클래스 정수  (0) 2008/06/19
PHP static 키워드  (0) 2008/06/19
PHP 스코프 연산자(::)  (0) 2008/06/19
PHP 억세스권(접근권한) : Visibility  (0) 2008/06/19
PHP 컨스트럭터와 디스트럭터  (0) 2008/06/19
PHP 오브젝트의 오토로딩  (0) 2008/06/19
PHP 클래스의 기초  (0) 2008/06/19
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5  (0) 2008/06/19
Trackback 0 : Comment 0

PHP 억세스권(접근권한) : Visibility

PHP/매뉴얼 번역 2008/06/19 17:33
억세스권 (접근권한 :Visibility )

프로퍼터(속성) 또는 메소드의 억세스권 (visibility) 은  키워드 public, protected 또는 private 를 지정하여 정의할 수 있다. public 으로 정의된 아이템은 어디에서도 억세스가 가능하다. protected 는 상속받은 클래스 또는 부모클래스  (그리고 아이템을 정의한 클래스) 로 억세스를 제한한다. private 는 아이템을 정의한 클래스에서만 억세스할 수 있다. 


멤버의 억세스권 (Members Visibility)

클래스의 멤버는 public, private, protected 로 정의하여야 한다.

멤버선언 예

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public
$public = 'Public';
    protected
$protected = 'Protected';
    private
$private = 'Private';

    function
printHello()
    {
        echo
$this->public;
        echo
$this->protected;
        echo
$this->private;
    }
}

$obj = new MyClass();
echo
$obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
   
// We can redeclare the public and protected method, but not private
   
protected $protected = 'Protected2';

    function
printHello()
    {
        echo
$this->public;
        echo
$this->protected;
        echo
$this->private;
    }
}

$obj2 = new MyClass2();
echo
$obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined

?>


주의: 키워드 var 로 변수 선언을 하는 PHP 4 의 방법은 호환성을 유지하기 위하여 여전히 지원하고 있다. ( public 과 같은 의미) PHP 5.1.3  이전에서는 var 변수를 사용하면 E_STRICT 경고가 발생한다.

메소드의 억세스권 (Method Visibility)

클래스메소드는 public, private, protected 으로 정의하여야 한다. 어떤선언도 없는 메소드는 기본적으로 public 로 정의 된다.

메소드 선언 예

<?php
/**
 * Define MyClass
 */
class
MyClass
{
   
// Declare a public constructor
   
public function __construct
() { }

   
// Declare a public method
   
public function MyPublic
() { }

   
// Declare a protected method
   
protected function MyProtected
() { }

   
// Declare a private method
   
private function MyPrivate
() { }

   
// This is public
   
function Foo
()
    {
       
$this->MyPublic
();
       
$this->MyProtected
();
       
$this->MyPrivate
();
    }
}

$myclass = new MyClass
;
$myclass->MyPublic();
// Works
$myclass->MyProtected();
// Fatal Error
$myclass->MyPrivate();
// Fatal Error
$myclass->Foo();
// Public, Protected and Private work


/**
 * Define MyClass2
 */
class MyClass2 extends
MyClass
{
   
// This is public
   
function Foo2
()
    {
       
$this->MyPublic
();
       
$this->MyProtected
();
       
$this->MyPrivate();
// Fatal Error
   
}
}

$myclass2 = new MyClass2
;
$myclass2->MyPublic();
// Works
$myclass2->Foo2();
// Public and Protected work, not Private

class
Bar
{
    public function
test
() {
       
$this->testPrivate
();
       
$this->testPublic
();
    }

    public function
testPublic
() {
        echo
"Bar::testPublic\n"
;
    }
   
    private function
testPrivate
() {
        echo
"Bar::testPrivate\n"
;
    }
}

class
Foo extends
Bar
{
    public function
testPublic
() {
        echo
"Foo::testPublic\n"
;
    }
   
    private function
testPrivate
() {
        echo
"Foo::testPrivate\n"
;
    }
}

$myFoo = new foo
();
$myFoo->test();
// Bar::testPrivate
                // Foo::testPublic
?> 


원문링크: http://www.php.net/manual/en/language.oop5.visibility.php

목차에
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5



 

Trackback 0 : Comment 0

PHP 오브젝트의 오토로딩

PHP/매뉴얼 번역 2008/06/19 16:45
오브젝트의 오토로딩 (Autoloading Objects)

오브젝트 지향어플리케이션을 작성하는 많은 개발자가 클래스정의를 할때 마다 하나의 PHP 소스 파일을 작성한다. 가장 큰 문제점이 각 스크립트의 앞부분에 필요한 inclueds 를 하기 위하여 긴긴 리스트를 작성해야할 필요가 있다.

PHP 5 에서는 이럴 필요가 없다. 미정의 클래스/ 인터페이스를 사용하려 할대 자동적으로 호출되는 __autoload 함수를 정의 할 수 있다. 이 함수를 호출하여  스크립트엔진은 PHP가 에러가 발생하여 멈추기전에 클래스를 로드할 마지막 기회를 주게 된다.

주의: __autoload 함수의 내부에서 던져진 예외는  catch 블럭에서 캐치할 수 없으며 치명적 에러가 발생하게 된다.
주의: 오토로딩은 PHP 를 CLI 대화모드에서 실행하고 있는 경우에는 사용할 수 없다.
주의: 클래스명을 예를 들어 call_user_func() 등에서 사용하는 경우 ../  같은 위험한 문자를 포함하는 경우도 있다. 이런 함수에는 유저가 입력을 넘겨주지말것을 권장한다. 또는  적어도 __autoload() 내부에서 입력내용을 검증을 하도록 한다.

오토로딩 예
다음 예에서는 클래스 MyClass1MyClass2 를 각각 MyClass1.phpMyClass2.php  로 부터 로드한다.
<?php
function __autoload($class_name) {
    require_once
$class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

다음 예에서는 인터페이스 ITest 를 로드하려고 한다.
<?php

function __autoload($name
) {
   
var_dump($name
);
}

class
Foo implements ITest
{
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>


원본링크 : http://www.php.net/manual/en/language.oop5.autoload.php

목차로
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5


Trackback 0 : Comment 0

PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5

PHP/매뉴얼 번역 2008/06/19 14:36

tags : Class, php, 클래스
Trackback 0 : Comment 0

어드레스 클래스

Network/TCP/IP 2008/03/11 00:59
IP어드레스 어드레스 클래스
 클래스 A  0 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
 클래스 B  1 0 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
 클래스 C  1 1 0 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x


클래스 A
  • 최상위 1비트가 0.
  • 0.0.0.0 ~ 127.255.255.255 가 해당.
  • 넷마스크 값은 255.0.0.0
  • 네트워크 부분은 1바이트 , 호스트부분은 3바이트
  • 하나의 네트워크 어드레스가 가질수있는 최대의 호스트수가 각각 약 1600만대 정도(0.0.0 ~255.255.255)

클래스 B
  • 최상위 2비트가 1 , 0
  • 128.0.0.0 ~ 191.255.255.255
  • 넷마스크 값은 255.255.0.0

클래스 C
  • 최상위 3비트가 1,1,0
  • 192.0.0.0 ~ 223.255.255.255
  • 넷마스크 값은 255.255.255.0

이외에도 클래스 D , 클래스 E 도 있음.

'Network > TCP/IP' 카테고리의 다른 글

어드레스 클래스  (0) 2008/03/11
Trackback 0 : Comment 0