-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
클래스 접근 문제
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/ )
암튼 제가 하는 것에서 에러를 잡을 수 있는 방법이 있나요?
답변을 작성해보세요.
0
0
정상우
지식공유자2020.05.13
이 부분에 대해서는 저도 명확히 해결해드리기는 어려울 것 같습니다. 해당 버전에서만 나타나는 에러인지,
또는 다른 원인 때문인지는 단서가 너무 부족하기 때문입니다. :(
그나마 현재 해볼만한 방법으로는 버전을 교체하는 방법 밖에는 떠오르지 않는군요.
0
0
0
0
정상우
지식공유자2020.05.13
혹시 제가 드린 코드를 직접 복붙하셔서 실행시켜보셨나요? PHP 플레이그라운드에서 테스트 해본 결과 PHP 5.6 에서도 실행이 되는 것을 확인했습니다.
0
0
정상우
지식공유자2020.05.13
안녕하세요, 실험해본 결과 일단은 정상적으로 나오는 것을 확인했습니다. 다만 위의 예제코드는 실수이시겠지만 __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 객체 생성시 생성자에게 파라매터를 넘겨주지 않을 경우 기본값인 '' 이 할당되어 객체가 아니므로 접근할 수 없습니다.
답변 8