2013-05-31 4 views
1

제 질문은 어떻게 PHP 클래스 객체를 데이터베이스에 삽입해야합니까? 내가PHP 데이터베이스에 클래스 객체 삽입하기

Cat.php

class Cat{ 
private $name; 

public function setName($name){ 
$this->name = $name 
} 

public function database(){ 
....$this->name; 
//Insert stuff into db 
} 

} 

Somefile.php

if($_POST['catname']){ 
    //This way? 
    $obj1 = new Cat(); 
    $obj1->setName($_POST['catname']); 
    $obj1->database(); 

    //Or this way 
    //Insert Cat directly into the db without creating an object of Cat 


} 

을 가지고 있고 데이터베이스에이 고양이를 삽입합니다. cat 내에서 $ this-> name을 얻는 함수를 만들거나 객체를 만들기 전에 데이터베이스에 삽입해야하는 함수를 만드는 것이 가장 좋을까요?

+0

어떤 유형의 데이터베이스입니까? 나는'Serializable' 인터페이스를 만든 다음 직렬화 가능한 모든 클래스에'writeObject'와'readObject' 메소드를 구현한다고 말하고 싶습니다. – crush

+0

현재 mysql을 사용하고 있습니다 – tiggles

답변

3

문자열로 클래스를 직렬화하는 것입니다 그것을하는 가장 쉬운 방법.

http://php.net/manual/en/language.oop5.serialization.php

$string = serialize($cat); 
하지만 데이터베이스에 당신이 오버 헤드를 많이 만들 것입니다 이런 식으로.

가장 좋은 방법은 테이블에 관련 필드를 포함하고 해당 값을 저장하는 것입니다. 클래스를 읽고 테이블에 저장하는 함수를 쉽게 만들 수 있습니다. 이렇게하면 데이터를 훨씬 더 이식 가능하고 교환 가능하게 만들 수 있습니다.

+0

이것은 내가 생각하기에 "가장 쉬운"접근 방법입니다. – crush

+0

매우 적절하지만 확실히 가장 쉽습니다 : 오토로더는 P – ZorleQ

0

이상적으로 개체 자체는 데이터베이스 자체를 저장해야합니다. 이 방법을 사용하면 논리가 cat이 무엇인지 또는 어디에 저장되는지를 알 필요가 없습니다. cat 클래스는 독립적이어야하며, DB 유형이나 향후 다른 것을 변경하려면 논리에 영향을주지 않고 클래스에서 변경할 수 있습니다.

+0

클래스의 내부에서 함수를 사용하는 방법 중 하나를 알고 싶다면 부모 연산자를 사용하는 것이 좋습니다. 비슷한 것 Cat :: database(); 이것이 당신의 요구 사항 일지 확실하지 않은 경우 – TheSnooker

+0

좋은 방법이라고 확신하지 못합니다. 두 가지 이유가 있습니다. 1. 데이터베이스를 변경 한 날에 좋지 않은 모델 개체를 만져야합니다. 2. 그것은 OOP의 한 원칙에 어긋납니다 : Single Responsibility Principle ... 당신은 어떻게 생각합니까? – mlwacosmos

+0

@ mlwacosmos 몇 가지 레이어에 대한 제안은 분명 유효한 접근법이지만, OP를 추가 레이어 나 디자인 패턴을 추가하여 복잡한 작업없이 데이터 레이어에서 로직을 명확하게 분리하려고했습니다. 작은 프로젝트에 소수의 소수 클래스 만 있다면, 내 접근 방식이 유효하다고 생각합니다. – dKen

0

cat의 인스턴스를 가져와 데이터를 데이터베이스에 저장하는 별도의 개체가 있어야합니다. 당신은 getVitalData이라는 방법을 사용하여 데이터베이스에 들어가야하는 모든 데이터를 제공 할 수 있습니다 (결국 이름 외에 여러 가지 정보가있을 수 있습니다).

Each class should have one responsibility

0

일반적으로 프로젝트에는 여러 개의 레이어가 있으며이 레이어 중 하나는 DAO (데이터 액세스 개체)입니다. 이 클래스에서는 응용 프로그램을 데이터베이스에 연결합니다. 이 층은 그냥이 층

정말 이상적하기에 존재하는 오브젝트를 다시 데이터베이스를 변경 싶어 날 ... 예를 들어, 저장 방법을 통해 데이터베이스에

를 개체를 저장한다 DAO 계층은 모델 객체 (CAT)와 다르다. 데이터베이스의 테이블처럼 보이는 영구 객체이다

2

serialize을 사용할 수 있고, 좋은 오토로더를 가지고 있다면 걱정할 필요가 없다. 당신이 비 직렬화 할 때 존재하지 않는 클래스.사용자 지정 코드를 사용하여 객체를

__wakeup() 직렬화 할 때 - - 사용자 지정 코드를 객체

PS 일렬 화를 푸는 경우

__sleep()가 :

에게

또한 사용할 수있는이 마법의 기능을주의

바꾸기 :

$obj1->setName = $_POST['catname']; 

$obj1->setName($_POST['catname']); 

참고 :

+0

+1입니다. – crush

+0

좋아, 내가 더 serialize에 살펴 보겠습니다. 좋은 캐치. 나는 변화를 만들었다. – tiggles

0

serialize 및 unserialize를 살펴보고 필요한 경우 데이터베이스에 직렬화 된 문자열을 저장할 수 있습니다. 여기에 간단한 예가 나와 있습니다.

<?php 
class Cat { 
    protected 
     $name; 
    public function getName() { 
     return $this->name; 
    } 
    public function setName($name) { 
     $this->name = $name; 
     return $this; 
    } 
} 

$cat = new Cat; 
$cat->setName('Tiddles'); 

$string = serialize($cat); 
$cat = unserialize($string); 

var_dump($cat); 

/* 
    object(Cat)#2 (1) { 
     ["name":protected]=> 
     string(7) "Tiddles" 
    } 
*/ 

안토니.

관련 문제