programing

오브젝트가 아닌 멤버함수를 호출합니다.

kingscode 2023. 1. 2. 23:09
반응형

오브젝트가 아닌 멤버함수를 호출합니다.

그래서 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']);
}

$objPagepage_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

반응형