2013-05-20 5 views
2

저는 OOP와 PHP도 상당히 새롭고 자습서와 책을 읽으면서 글을 읽었습니다. 지금은 개인 프로젝트 (튜토리얼이나 책 연습 없음)로 작업하고 있으며 클래스와 파일을 구성하는 방법에 대한 질문이 있습니다.OOP의 파일 및 클래스 구조 PHP

은 내가 내 데이터베이스 내 연결을 생성하는 database.php 파일을 가지고, 내 수업의 __construct 기능에 난과 같이, 그 위에 전화 :

<?php 

include 'database.php'; 

class users { 

// Database Connection 
public function __construct() { 
    $db = new database(); 
} 

// the rest of my functions 

?> 

문제/질문 나는 자습서와 연습에서 내가 한 클래스 밖에 없다는 것입니다. 현재 내 프로젝트에는 3 개의 클래스 (사용자, 영화 및 주시 문서 목록)가 있으며 모두 .php 파일 (users.php, movies.php 및 watchlists.php)을 가지고 있습니다.

내 프로젝트의 특정 페이지에서 데이터가 필요합니다. 3 개 클래스 나는과 같이 해당 페이지를 시작할 수 있도록 :

<?php 
session_start(); 

include 'include/users.php'; 
include 'include/movies.php'; 
include 'include/watchlists.php'; 
$user = new users(); 
$movie = new movies(); 
$watchlist = new watchlists(); 

// the rest of the file 

이제 내게는 매우 명백이 나는 데이터베이스 연결을 만드는거야 당신이 여러 클래스를 가지고있는 올바른 방법이 아니라는 세 번 열.

그래서 내 프로젝트에서 작업 할 때 클래스, 데이터베이스 연결 및 .php 파일을 올바르게 관리하려면 어떻게해야합니까?

당신이 모든 멋진 기사/자습서에 나를 연결할 수 있다면, 당신은 모든 것을 설명 할 필요가 없습니다, 크게 감사하겠습니다. (예, 나는 그것을 봤지만 아무 도움이 찾을 수 없습니다).

감사합니다.

+0

무수히 많은 include를 피하려면 오토로더를 사용하거나 include_once를 대신 사용하여 데이터베이스 연결을 필요로하는 클래스에 삽입하십시오. –

+1

자동 로딩 http://php.net/manual/en/language.oop5에서 읽어보십시오. autoload.php – fullybaked

+0

또한 자동 로딩이 더 좋을지라도 클래스의 인스턴스 하나만 실행되도록하는 싱글 톤 클래스를 사용할 수 있습니다. – edwardmp

답변

2

이 간단한 단계 만 수행하면 연속으로 데이터베이스에 연결되지 않습니다.

include 'database.php' 

include_once 'database.php' 

에 유일한 것은 「클래스 파일」을 말할 것이다 가장 PHP 코딩 표준이

if(!$con) { 
    $con = mysqli_connect(HOST, USER, PASS); 
} 
1

처럼 다소 연결 코드를 작성 교체 클래스 정의가 포함되어야합니다. 즉 include 또는 require을 의미합니다. 그렇다면 한 클래스에서 다른 클래스에 액세스하는 것을 어떻게 허용합니까?

Autoloading! 자동 로딩에 대해 읽어보십시오. 그러나 간단한 설명은 오토로더를 별도의 파일 (실제로 클래스를 사용하는 파일)과 호출하는 클래스 및 해당 클래스에 필요한 클래스로 정의한다는 것입니다. PHP는 으로 자동으로을 가져옵니다. 자동 로딩은 우수합니다. 왜냐하면 include 문을 입력 할 필요가 없으며, 실제로 사용하는 클래스 만 가져 오므로 더 효율적입니다.

또 다른 요점은 모든 클래스를 자신의 폴더에 보관 한 다음 실제로 해당 폴더 외부의 클래스를 사용하는 것입니다. 다시 말하지만, 그냥 규칙이지만, 오토로드를 조금 더 쉽게 구현할 수 있습니다.

+0

정보 주셔서 감사합니다, 나는 PHP에서 오토로더를 찾았으며 지금 당장 그것을 사용하고 있습니다. – Jrn