2011-04-23 3 views
1

PHP 파일 및 해당 서버의 적절한 디자인에 관한 일반적인 질문이 서버에있었습니다.URL 전파의 변화에 ​​영감을 얻은 PHP 및 서버 계층 디자인

문제는 이것이다 : 나는 다른 PHP 파일에 PHP는 객체의 기능을 분할했다, 뭔가 같은 :

파일 1 AndroidFlashCard.php

class AndroidFlashCard { 
    public function retrieveCards($packname){} 
    public function retrievePacks(){} 
    .... 

파일 2 RetrieveCards.php

include ($_SERVER['DOCUMENT_ROOT'].'/flash_card/AndroidFlashCard.php'); 
$connection = new AndroidFlashCard(); 
$connection->retrieveCards($_REQUEST['pack']); 
... 

하나의 함수 호출을 위해 별도의 PHP 파일을 만드는 것으로 간주되는 나쁜 코드 냄새 외에 AndroidFlashCard 클래스의 위치/이름이 변경되면 문제가 발생합니다.

파일 3 include.php :

include ($_SERVER['DOCUMENT_ROOT']./[location of class]) 
우리가이 겉만 번지르르 한 디자인으로 가서 내가 마음에 온 신속하고 더러운 솔루션

다른 파일을 포함하도록했다 1000 개 다른 기능을 ... 있다고 가정

그러나 이것은 실제로 아무것도 변경하지 않습니다. 왜냐하면 include.php 파일의 위치가 변경되면 다시 1000 번 변경해야하기 때문입니다.

이렇게 생각해 봅시다. 클래스에 대한 참조 만 포함하고 함수를 실행하기 위해 코드를 포함하는 1000 개의 PHP 파일을 1000 건 변경해야하는 경우 디자인 문제 일 수 있습니다.

안드로이드에서는 HTTP 요청을 실행하는 방법 만 알고 있기 때문에 함수 호출을 개별 파일로 분할합니다.

만약 내가 그 PHP 개체를 잡을 수 있다면, 그것은 일을 더 쉽게 만들 것이지만, 나는 이것이 성취하기 어려울 것이라고 느낀다.

더 간단한 해결책은 무엇입니까? 디렉토리 구조를 제작 작업의 디자인 부분으로 쓰고 있습니까? 승인 후에는 그냥 돌로 쓴 것입니까?

답변

0

클래스 자동 로딩의 경우처럼 들릴 수 있습니다. 말 파일 2에서 클래스를 사용할 때 PHP는 자동로드 함수를 호출하여 실제로 포함 할 클래스를 찾을 수 있습니다. 당신은 논리 뒤에 그것을 써야 할 것입니다. 그러나 당신이 말한 것처럼 1000이 아니라 1이 바뀝니다.

__autoload($class_name)

+0

더 많은 정보를 얻으려면 GET 요청을 사용하여 코드 라이브러리에서 원하는 기능이나 개체를 반환하는 단일 http 게이트웨이를 만드는 것이 좋습니다. 예. 'http : //yourlibs.org/? library = retrievecards' – daganh

0

그것은 클래스 내부의 모든 클래스 함수, 다른 파일에 단지에만 별도의 클래스를 가지고 일반적으로 좋은 생각이다. 디렉토리와 코드 구조에 관해서는 프레임 워크가 어떻게 작동하는지 살펴볼 수 있습니다. Model-View-Controller 패턴과 마찬가지로, 이미 생각한 코드 구조를 가지고 있습니다. Spendifically 젠드 프레임 워크를 살펴보고 Zend MVC가 제공하는 사전 정의 된 디렉토리 구조를 사용하면됩니다. Zend 자동 로더를 사용하면 Zend 네임 스페이스 명명 규칙을 고수하면 include_file()을 전혀 수행 할 필요가 없습니다.