2010-01-17 2 views
0

PHP에서는 많은 사람들이 클래스를 사용하여 세션 변수를 가져올 것이라는 것을 알고 있습니다. 지금은 많은 클래스에서이 작업을하고 있습니다. 잘못하고 있는지를 알아야합니다. 그래서 예를 들어메소드가 PHP 클래스에서 여러 번 실행되면 클래스 변수에 캐시되어야합니까?

내가 15 개 방법이있는 경우이 클래스에서 이제이 값

$_SESSION['user_id'] 

을 얻고 각각의 방법이

$session->get('user_id') 

를 사용해야하는 클래스가 척 할 수 있습니다 I 이 값을 여러 번 액세스해야합니다. 현재 클래스 당 1 회를 해당 클래스의 로컬 변수로 설정해야하는 경우 클래스에서 $ session-> get ('user_id') 20 회 호출하고 있습니다. 그런 다음 액세스 할 수 있습니까? 어떤 차이를 만들지 모르겠다면, 내 이론은 내가 지금하고있는 방법은 피할 수있는 20 개의 추가 함수 호출이라는 것입니다.

제 이론이 맞다면, 클래스 내부에 이러한 값을 저장하는 가장 좋은 방법은 무엇입니까? 개인 또는 공개 또는 보호 된 변수와 비슷합니까?

죄송합니다. 혼란스러워서 죄송합니다. 클래스와 객체는 배우는 데 다소 시간이 걸립니다.

또한 $ session-> get ('user_id')은 똑같은 작업을 수행하는 데 필요한 많은 다른 변수 중 하나입니다.





UPDATE

배열을() 사용에 대한 Chacha102의 게시물을 읽고 나면 ... 여기가 생겼는데, 내가 시도 것입니다 좋은 방법 또는 아직도 많이 향상시킬 수 있습니까?

클래스 파일

<?PHP 
class User 
{ 
    // Load user details into an Array 
    public function load_user() 
    { 
     $this->user_id = $this->session->get('user_id'); 
     //if user ID is already set, then Load the cached urser data 
     if(isset($this->user_id) && $this->user_id != ''){ 
      // set user data to an array 
      $this->user['user_id'] = $this->user_id; 
      $this->user['user_name'] = $this->session->get('user_name'); 
      $this->user['pic_small'] = $this->session->get('pic_small'); 
      $this->user['sex'] = $this->session->get('sex'); 
      $this->user['user_role'] = $this->session->get('user_role'); 
      $this->user['location_lat'] = $this->session->get('location_lat'); 
      $this->user['location_long'] = $this->session->get('location_long'); 
      $this->user['new_user'] = $this->session->get('new_user'); 
      return $this->user; 
     } 
    } 
} 
?> 

메인 페이지 파일이 같은 일을하는 경우

<?PHP 
require 'user.class.php'; 

$user = new User; 

// if a user_id is set into a session variable then we return an array of other user related data 
$user->account = $user->load_user(); 

// would show the user's ID from our array 
echo $user->account['user_id']; 
?> 

답변

2

:

if($session->get('user_id')==1) 
{ 
    $prefs = get_prefs($session->get('user_id')); 
    $info = get_info($session->get('user_id')); 
} 

가 나는 지역 변수

이후로 교체 할을
$id = $session->get('user_id'); 
if($id == 1) 
{ 
    //..... 
} 

투명도가 높아집니다. 반복적 인 간단한 함수를 호출하는 것이 큰 문제는 아니지만 여전히 그렇게하지 않을 것입니다.

하나의 메서드에서 호출하는 함수의 수를 줄이려고합니다.

$user_id = $session->get('user_id'); 
$name = $session->get('name'); 
// ... etc ... 

대신 모든 세션 변수의 배열을 가져오고 싶을 수도 있습니다.

이렇게하면 함수 호출이 줄어들고 모든 데이터가 한꺼번에 처리됩니다.


사용자 데이터의 배열을 사용하여 선명도에 그냥 한 가지, 아마 각 일 ($user_name, $user_id 등)에 대한 변수를 생성하는 것보다 쉽게 ​​읽을 수 있습니다.

+0

배열로 여러 값을 얻으려는 생각이 정말 좋아서 get_array()와 같은 함수를 만들어야하고 내부에 원하는 모든 값을 가져와야합니다. 감사합니다 – JasonDavis

+0

나는 배열을 기반으로 몇 가지 샘플 코드로 내 질문을 업데이 트했습니다, 만약 이것이 어떻게 할 수 있을지 모르겠습니다? 그것은 작동하는 것 같지만 이것은 좋은 방법입니까? – JasonDavis

+0

세션은 사용자 클래스가 호출하는'get_all' 함수를 가지고 있어야합니다. 각각의 물건을 개별적으로 얻는 것은 정말로 신중하지 않아야합니다. 그것의 배열 ('$ _SESSION')에 이미있다. 그래서 그 배열을 붙잡아 야하지 않을까? –

2

여러 가지 방법으로 분산 된 액세스의 경우 함수를 변수에 액세스하기 위해 사용하는 한,이 함수를 사용하는 것이 좋습니다. 추가 비용은 매우 적으며 장기 유지 관리가 더 좋습니다.

동일한 방법으로 Chacha102에서 제시하는 것처럼 하나의 함수 호출을 호출하여 로컬 변수를 채 웁니다.

함수가 데이터베이스 호출과 같이 리소스를 많이 사용하는 경우에도 클래스에 멤버를 추가하기 전에 내부 캐싱 기능을 제공하는 것이 좋습니다.

클래스에 멤버로 변수를 추가하는 것은 클래스의 합법적 인 멤버가 아닌 임시 변수이기 때문에 OOP 방식에서 실제로 의미가 없습니다.

+1

그래서 올바르게 이해하면 1 클래스에서는 여러 번 호출하지만 클래스 메서드에서는 여러 번 호출하는 것이 좋습니다. 한 번 전화 해? 그래서 클래스에 10 개의 메소드가 있고 각 메소드가 함수를 5 번 호출했다면, 그 함수를 50 번 호출하는 대신 10 번 호출하는 것과 같을까요? – JasonDavis

+0

정확히. -------- –

관련 문제