• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

클래스 접근 문제

20.05.13 04:12 작성 조회수 126

0

안녕하세요! 학습을 하는도중에 질문 거리가 자꾸 생겨나네요

구글링을 하다가 혼자 힘으로는 벅차서.. 질문 좀  하겠습니다.

App\Config\Base Object
(
    [baseUrl] => http://naver.com/
)


예를 들어서 위와 같이 저렇게 오브젝트가 있어요
(직접만든 클래스가 있는데 이걸 아래처럼...)



$appconfig = new App\Config\Base();

$test = new test($appconfig);


class test {

protected $config;

public function __constract($config = '') {

$this->config = $config;

$this->config->baseUrl << 이렇게 접근하려고 하니까 에러가 생겨요

}
}

Trying to get property 'baseUrl' of non-object in
잘못된 접근 프로퍼티? 라고 하는데 왜 이런 에러가 자꾸 뜰까요 ㅠㅠ

굳이 extend 할 필요 없이 저런식으로 하고 싶은데 그리고 생성자를 $this->config = new App\Config\Base()
이렇게 또 추가 한다고하면 데이터가 두개로 늘어나요

App\Config\Base Object
(
    [baseUrl] => http://naver.com/
)
App\Config\Base Object
(
    [baseUrl] => http://naver.com/
)

암튼 제가 하는 것에서 에러를 잡을 수 있는 방법이 있나요?



답변 8

·

답변을 작성해보세요.

0

프레드님의 프로필

프레드

질문자

2020.05.13

넵! 어쨌든 감사합니다~ 강사님! 버전교체를 시도해야겠군요 

0

이 부분에 대해서는 저도 명확히 해결해드리기는 어려울 것 같습니다. 해당 버전에서만 나타나는 에러인지,
또는 다른 원인 때문인지는 단서가 너무 부족하기 때문입니다. :( 

그나마 현재 해볼만한 방법으로는 버전을 교체하는 방법 밖에는 떠오르지 않는군요.

0

프레드님의 프로필

프레드

질문자

2020.05.13

제꺼 php 버전이 이건데 저기서는 아무이상없이 잘만되네요 ㅠㅠ 

PHP Version 7.3.17

0

혹시 아래에 들어가셔서 직접 테스트 해보시겠습니까?
http://sandbox.onlinephpfunctions.com/

0

프레드님의 프로필

프레드

질문자

2020.05.13

그대로 에러가 뜹니다 Trying to get property 'baseUrl' of non-object 

0

혹시 제가 드린 코드를 직접 복붙하셔서 실행시켜보셨나요? PHP 플레이그라운드에서 테스트 해본 결과 PHP 5.6 에서도 실행이 되는 것을 확인했습니다.

0

프레드님의 프로필

프레드

질문자

2020.05.13

그니까 7.4에서는 버그 같은거 해결 된건가요? 저는 한단계 아래 7.3으로 쓰고 있는데 7.4로 최신으로 해야지 저런 버그가 없나요?

0

안녕하세요, 실험해본 결과 일단은 정상적으로 나오는 것을 확인했습니다. 다만 위의 예제코드는 실수이시겠지만 __constract 라고 적으셨군요. 이는 PHP 7.4 에서 테스트 했습니다. 버전에 따라 체이닝은 지원하지 않는 경우도 있을 것이니 체크해보시기 바랍니다.

<?php

class Base
{
    // public $baseUrl = 'http://naver.com';
    public $baseUrl;
}

class Test 
{
    protected $config;

    public function __construct($config)
    {
        $this->config = $config;
        var_dump($this->config->baseUrl); // Passed
    }
}

$appConfig = new Base();
$appConfig->baseUrl = 'http://naver.com';

new Test($appConfig);

아 그리고 Trying to get property 'baseUrl' of non-object 에러는 접근 객체($this->config)가 객체가 아닐 때 발생합니다. 예를 들면 다음의 예시처럼 준 경우입니다.

new Test(null);

따라서 질문자님이 남겨주신 예제에는 기본 값으로 '' 으로 되어있기 때문에 Test 객체 생성시 생성자에게 파라매터를 넘겨주지 않을 경우 기본값인 '' 이 할당되어 객체가 아니므로 접근할 수 없습니다.