2010-02-16 2 views
0

OOP 용으로 PHP에서 파고 들었습니다. 뭔가 주목을 ... 객체가 페이지가 새로 고침 될 때마다 다시 인스턴스화됩니다. 문제는 누군가가 웹 사이트에있는 동안 클래스 변수에 특정 정보를 보관하기를 원합니다.PHP를 이용한 객체 지향 프로그래밍 : 새로 고침하면 내 객체가 죽습니다.

  1. 누군가가 웹 사이트에 서핑을하고 있음을 객체 살아 온 시간을 유지하는 방법의 일종이 있습니까?
  2. 에는 어떤 대안이 있습니까?

예제도 있으면 도움이 될 것입니다.

답변

5

PHP는 stateful이 아닙니다. 모든 페이지로드는 일회성 이벤트입니다. 세션을 사용하여 데이터를 유지하거나 데이터베이스에 정보를 저장할 수 있습니다. 모든 요청을 상태 형되지

7

당신은을 (인용) 다른 페이지 사이에 하나의 사용자에 관련된 데이터를 유지하는 Sessions을 사용할 수 있습니다 : PHP에서

세션 지원 접근에 대해 특정한 데이터를 보존 할 수있는 방법으로 구성되어 있습니다.

세션에 대한 자세한 내용은 설명서의 Session Handling 섹션을 참조하십시오.

+0

또는 더 나은 솔루션은 그래서 당신이 비 저장 HTTP 프로토콜에 대해 걱정할 필요가 없습니다 플렉스을 사용하는 것입니다 ... 나는 지금 조금 생각을 가지고있다. 내 생성자에서 클래스 변수를 처음으로 초기화 할 것입니다. 그렇지 않으면 $ _SESSION 배열에서 데이터를 가져옵니다. 소멸자가 호출 될 때 클래스 데이터를 $ _SESSION 배열 안에 저장합니다. 어떤면에서는 개체의 모든 것을 새로 고침 할 때마다 전역 배열에 배치해야하므로 OOP가 손상된 것처럼 느껴집니다. $ _SESSION은 어디에서나 액세스 할 수 있습니다. – Partial

2

아파치가 페이지를 제공하기 전에 PHP 스크립트가 종료되어야하므로 수행 할 수있는 한 가지는 serialize이며 유지하려는 모든 객체를 저장하고 session 쿠키를 사용하여 추적합니다. 사용자의

+0

+1 : 멋지다! 나는 PHP에서 이것을 할 수 있는지 몰랐다. 그래서 개체를 serialize하고 $ _SESSION 배열에 저장해야합니다? – Partial

+1

리소스를 직렬화 할 수 없으므로 세션에 저장할 수 없습니다. 예를 들어, 세션에 저장 한 객체가 DB 연결을 사용하면 세션에서 다시 검색 할 때 사라집니다. 그러나 PHP는 이것을위한 메커니즘 (마법 클래스 메소드)을 가지고 있습니다 :'__wakeup'. 객체가 deserialize되면'__wakeup'이 호출됩니다. 따라서이 방법으로 자원을 다시 활성화 할 수 있습니다. '__wakeup'에 관한 문서를보십시오 : http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep –

+2

객체를' $ _SESSION'? 내가 아는 한 자동적으로 ... –

2
  1. PHP는

가장 좋은 방법은 당신이 그것들을 초기화 할 때 객체에 세션 데이터를 세션 데이터를 사용하고 손에있는 서버에 새 과정이다. 컨스트럭터가 세션에서 필요한 데이터를 가져 오게하면 필요한 상태 충만 함을 가질 수 있습니다.

당신이

$_SESSION['stuff'] = $data; 

은 다음 $ X = 새로운 데이터 저장소와 같은 개체를 사용하여 sesion를 ACESS 수

($ _ SESSION [ '물건']);

세션의 데이터가 개체에서 해당 데이터를 채우는 경우. 그렇지 않으면 표준 init이 기본값이됩니다.

1

개체를 serialize하고 deserialize하는 것과 같은 접근법이 유용 할 때도 먼저 개체가 "사라지는"것을 먼저 이해해야합니다.

웹 서버에서 페이지 및 기타 리소스를 검색하는 데 사용되는 프로토콜 인 HTTP는 이며 상태 비 저장입니다. 기본적으로 하나의 요청은 다른 사용자가 요청한 경우에도 마찬가지입니다. 이 방법으로 생각하면 PHP 페이지를 요청하면 스크립트가 실행되고 완료되면 Apache가 결과를 보냅니다. 페이지를 다시 요청하면 처음 한 것처럼 페이지가 다시 나타납니다.그것은 무국적자입니다.

요청간에 상태를 유지하는 기술 (개체를 잊지 않도록)과 쿠키 또는 URL 다시 쓰기와 같은 것들이 포함됩니다. 그러나 웹 애플리케이션을 개발할 때 HTTP (즉 PHP 스크립트)의 무국적 특성을 명심해야합니다.

+0

HTTP의 무국적 성은 문제가되지 않습니다. 상태 비 저장 HTTP를 통해 액세스되는 상태 보존 형 환경 (예 : 레일스 애플리케이션)은 가질 수 있지만 그 자체는 상태 저장 형입니다. –

1

세션은 좋은데, 나는 그들을 사용하여 일부 PHP 프로그래밍에서 객체 상태를 유지합니다.

+0

Flex에 대해 더 자세히 알려 주실 수 있습니까? – Partial

+0

Adobe Flex는 기본적으로 Silverlight 및 JavaFX와 같은 진정한 RIA 프레임 워크와 개념이 비슷합니다 (이러한 프로그래밍 방식을 사용하지 않았기 때문에 이에 대한 의견을 제시 할 수 없습니다). 플렉스 앱은 AS3 (로직 - 플래시와 동일한 언어) 및 MXML (인터페이스 용)으로 작성됩니다. 최종 결과는 브라우저에서 볼 수 있도록 HTML을 자동으로 생성하는 SWF 파일로 컴파일됩니다. Air를 사용하여 데스크탑에서 실행할 수도 있습니다. 또한 오픈 소스이기 때문에 누구나 프로그램 할 수 있습니다. 자바 스크립트 또는 jQuery보다 완벽한 패키지입니다. 둘 다 사용하고 jQuery는 많은 양의 데이터에 적합하지 않습니다! – PostCodeism