2010-07-20 2 views
0

PHP 객체 지향 프로그래밍에 익숙하지 않지만 프로 시저 방식으로 코딩하는 것을 알고 있습니다.PHP 클래스 변수 정의가 필요합니까?

이 내 PHP 클래스

<?php 
class person { 
    var $name; 
    function __construct($persons_name) { 
    $this->name = $persons_name; 
    } 

    function get_name() { 
    return $this->name; 
    } 
} 
?> 

하고 있으면 내 PHP 페이지에 액세스 할 경우

$jane = new person("Jane Doe"); 
echo "Her name is : ".$jane->get_name(); 

질문 : 이 때문에 내 PHP 클래스의 var $name;을 넣어 정말 필요한가 의 출력은 정확하게 얻을 수 있습니다. Jane Doe 내 P 안에 var $name;이없는 경우에도 이름이 다음과 같습니다. HP 수업?

+0

* [PHP 클래스 배우기] (http://stackoverflow.com/questions/2206387/learning-php-class/2206835) – Gordon

답변

2

의미 상, $name은 실제로 클래스의 속성입니다. 생성자는 이미 $persons_name을 속성에 할당하지만 var $name;을 그대로두면 나머지 스크립트는 클래스에 이러한 속성이 있는지 실제로 알지 못합니다. 또한 생성자가 즉시 할당하지 않은 경우 person::get_name()은 선언되지 않은 $name 속성을 검색하고 알림을 트리거하려고 시도합니다.

Brenton Alker says으로 명시 적으로 클래스 속성을 선언하면 표시 여부를 설정할 수 있습니다. 예를 들어 $name의 게터로 get_name()이 있으므로 $nameprivate으로 설정하면 person 개체를 만든 후 사람의 이름을 클래스 외부에서 변경할 수 없습니다.

또한 선언되지 않은 클래스 속성에 할당하려고하면 할당되기 전에 public으로 선언됩니다.

0

매우 유용합니다. 배열에 서로 다른 이름을 가진 많은 수의 사람 개체를 작성한다고 가정하면 웹 사이트의 다른 위치에있는 모든 개체의 이름을 호출하게됩니다. 이것은 모든 특정한 사람의 이름을 저장할 때 가능합니다.

+0

샘플 코드는 어디에서 유용할까요? OOP를 처음 사용합니다. 감사합니다 – Sanny

+0

확실 : 이 함수를 호출하면 personarray를 얻습니다. 모든 사람을 식별하기 위해 저장된 이름이 필요합니다. (필자는 PHP atm이 아니기 때문에 구문상의 실수가있을 수 있지만 의미가 무엇인지 설명 할 것입니다.) – tagtraeumer

+0

sry 나는 이런 종류의 주석에 코드를 넣는 법을 모릅니다. – tagtraeumer

0

올바르게 이해하면 var $ name을 선언 할 필요가 없습니다. 대신 PHP의 마법 방법을 사용할 수 있습니다.이 경우 __set__get입니다.

편집 :magic methods @ Nettuts에 대한 소개가 있습니다.

4

기술적으로는 아니지만 PHP는 이와 같이 매우 용인합니다. 그러나 문서화 목적으로 만 사용하는 것이 좋습니다.

아마도 더 중요한 것은 속성을 명시 적으로 선언하면 visibility을 설정할 수 있습니다. 귀하의 예제에서 $ name은 공용 속성입니다 (public은 PHP의 기본 표시). 공개가 필요하지 않은 경우 (게터/세터가 어떤 값을 할당 할 수 있는지 더 잘 제어 할 수 있기 때문에 안전하지 않은 경우가 많습니다.) 보호 또는 개인용으로 선언해야합니다.

+0

1 질문 more sir : var $ name에 "related"함수에있는 $ this-> name입니다. 또는 그들은 2 개의 다른 변수입니다 – Sanny

+0

var $ name을 선언하는 이유는 함수 안에 $ this-> name이 있기 때문입니까? – Sanny

+0

예, $ this-> name은 현재 인스턴스 ($ this)의 ($ next) 속성을 참조합니다. –