2012-06-13 2 views
0

codeigniter를 사용하고 컨트롤러 폴더에서 다음과 같은 PHP 파일을 만들었습니다.
참고 :은 데이터베이스를 자동으로 연결합니다.

<?php 

    class Book extends CI_Controller { 

     $query = $this->db->get('books'); 

     foreach ($query->result() as $row) { 

      function $row->book_name() { 
       echo $row->book_name; 
      } 

     } 

    } 

?> 

데이터베이스에서 책 이름을 가져 와서 기능을 만들려고했지만 만들 수 없습니다. 함수 이름에 $ variable을 사용하면 함수를 생성 할 수 있습니까? 그렇지 않다면 어떻게 빨리 만들 수 있습니까? 감사합니다 ...

+2

하나의 클래스에서 직접 논리를 작성하기 시작하지는 않습니다. 당신의 논리는 ** 함수 안에 들어갈 ** 있습니다. –

+0

이 질문에 궁금한 사람들에게 : 데이터베이스에'foo','bar','baz'라는 책이 있다면 OP는 각각'foo','bar','baz'라는 멤버 함수를 생성하려고합니다 그 중 어떤 것을 반환합니다. – Eric

답변

0

당신이 찾고있는 create_function()이 맞습니까?

그러나 심각하게, 그것을 구글 나에게 분했다 ..

+1

이제 PHP는 적절한 익명의 기능을 지원하고, 심지어는 폐쇄도 지원합니다. – ddlshack

4

을 물론입니다.

$myfunction = function($a,$b,$c) {return $a+$b+$c;}; 

이것은 익명의 기능의 예입니다. 이름은 없지만 $myfunction(1,2,3)으로 액세스 할 수 있습니다.

당신의 예에서 당신이 무엇을하려하는지 완전히 모르겠습니다 ... 단지 echo $row->book_name만으로도 충분합니까? 아니면 책과 같은 이름의 함수를 정의하려고합니까? 후자의 경우 가변 변수를 사용할 수 있습니다 : ${$row->book_name} = function... - 아마도 좋은 생각이 아닙니다.

+2

부가 메모 : 이와 같이 정의 된 함수는 PHP 5.3에 추가되었습니다. 이전 버전을 사용하고 있다면 여전히 ['create_function()'] (http://php.net/create-function)을 사용하십시오. –

4

__call()에 관심이 있으실 것 같습니까?

존재하지 않는 클래스의 메서드를 호출하면 __call() 메서드가 호출되고 거기에서 호출을 처리 할 수 ​​있습니다.

결과를 읽을 때 배열에 책을 저장하고 __call 메서드를 클래스에 추가하십시오. 메서드에 액세스하면 호출 된 함수의 이름을 기반으로 배열에 대한 책을 검색하고 적절하게 작동 할 수 있습니다.

class Book extends CI_Controller { 
    protected $_books = array(); 

    public function __construct() { 
     $query = $this->db->get('books'); 

     foreach ($query->result() as $row) { 
      $this->_books[] = $row->book_name; 
     } 
    } 

    public function __call($name, $arguments) { 
     if (in_array($name, $this->_books)) { 
      echo $name; 
     } else { 
      ehco 'I do not have this book!'; 
     } 
    } 
} 

그냥 방법을 명명 염두에 PHP의 규칙을 유지, 유효한 함수 이름은 문자, 숫자 또는 밑줄의 수에 따라 문자 나 밑줄로 시작합니다. 공백은 허용되지 않으므로이를 명심하십시오.

+0

이것은 질문에서 실제로 묻는 것의 유일한 대답입니다. – Eric

관련 문제