오브젝트가 아닌 멤버함수를 호출합니다.
그래서 OOP를 더 구현하기 위해 코드를 수정하고 있습니다.페이지 속성을 보유하도록 클래스를 설정합니다.
class PageAtrributes
{
private $db_connection;
private $page_title;
public function __construct($db_connection)
{
$this->db_connection = $db_connection;
$this->page_title = '';
}
public function get_page_title()
{
return $this->page_title;
}
public function set_page_title($page_title)
{
$this->page_title = $page_title;
}
}
나중에 set_page_title() 함수를 호출합니다.
function page_properties($objPortal) {
$objPage->set_page_title($myrow['title']);
}
이 경우 다음 오류 메시지가 나타납니다.
오브젝트가 아닌 멤버함수 set_page_title()을 호출합니다.
내가 뭘 놓쳤지?
즉,$objPage
는 객체의 인스턴스가 아닙니다.변수를 초기화하는 데 사용한 코드를 볼 수 있을까요?
특정 오브젝트 타입을 상정하고 있기 때문에 PHP 타입 힌트문서 기능을 사용하여 논리를 위반했을 때 에러를 표시할 수도 있습니다.
function page_properties(PageAtrributes $objPortal) {
...
$objPage->set_page_title($myrow['title']);
}
이 함수는 다음 명령만 받아들입니다.PageAtrributes
첫 번째 파라미터에 대해서
이 에러를 발생시키는 간단한 방법이 있습니다.
$joe = null;
$joe->anything();
다음 오류를 표시합니다.
치명적 오류: 멤버 함수를 호출합니다.
anything()
/Applications/XAMPP/xamppfiles/htdocs/casMail/dao/server의 비개체.23행의 php
PHP가 이렇게만 말해주면 더 좋을 것 같아요.
치명적인 오류: (a) joe가 늘 또는 (b) joe가 정의되지 않았기 때문에 Joe로부터의 콜이 정의되지 않았습니다.
anything()
<##> 행에 접속합니다.
보통 당신은 당신의 반을 만들어야 한다.$joe
컨스트럭터에 정의되어 있지 않거나
어느 하나$objPage
인스턴스 변수가 아니거나 덮어쓰기 중입니다.$objPage
계급이 아닌 것을 가지고PageAttributes
.
또한 개체를 초기화할 때 코드의 다른 부분에서 개체 이름을 다시 사용했을 수도 있습니다.따라서 오브젝트에서 표준변수로 변경한다.
IE
$game = new game;
$game->doGameStuff($gameReturn);
foreach($gameArray as $game)
{
$game['STUFF']; // No longer an object and is now a standard variable pointer for $game.
}
$game->doGameStuff($gameReturn); // Wont work because $game is declared as a standard variable. You need to be careful when using common variable names and were they are declared in your code.
function page_properties($objPortal) {
$objPage->set_page_title($myrow['title']);
}
변수 $objPortal과 $objPage의 다른 이름처럼 보입니다.
저는 위의 답변에 동의하는 것을 추천합니다.그러나 위기에 처했을 경우 page_properties 함수 내에서 개체를 글로벌로 선언할 수 있습니다.
$objPage = new PageAtrributes;
function page_properties() {
global $objPage;
$objPage->set_page_title($myrow['title']);
}
$objPage를 page_properties()에 전달하지 않았다는 것을 깨달았습니다.지금은 잘 되고 있어요.
아래 예시와 같은 기능에서 '사용'을 사용할 수 있습니다.
function page_properties($objPortal) use($objPage){
$objPage->set_page_title($myrow['title']);
}
언급URL : https://stackoverflow.com/questions/54566/call-to-a-member-function-on-a-non-object
'programing' 카테고리의 다른 글
결과를 검색할 때 모호한 열 이름을 해결하는 방법은 무엇입니까? (0) | 2023.01.22 |
---|---|
vuex에서 개체 키/값 쌍을 초기 상태로 설정하는 방법 (0) | 2023.01.02 |
JavaScript에서 파일을 base64로 변환하는 방법 (0) | 2023.01.02 |
JSON 파일을 예쁘게 인쇄하는 방법 (0) | 2023.01.02 |
Eclipse - 디버거가 중단점에서 멈추지 않음 (0) | 2023.01.02 |