inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

PHP 7+ 프로그래밍

클래스 접근 문제

224

스터디하쟈

작성한 질문수 64

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/
)

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



php

답변 8

0

스터디하쟈

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

0

정상우

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

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

0

스터디하쟈

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

PHP Version 7.3.17

0

정상우

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

0

스터디하쟈

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

0

정상우

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

0

스터디하쟈

그니까 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 객체 생성시 생성자에게 파라매터를 넘겨주지 않을 경우 기본값인 '' 이 할당되어 객체가 아니므로 접근할 수 없습니다.

53강 레이아웃에서 css git 링크 관련 질문입니다.

0

35

2

[섹션 5]레포지토리 소스파일 오류 위치, 수정 제안

0

180

1

add configuratio.. 자체에

0

268

2

터미널에 글이 안써집니다.

0

635

1

일반적으로 쓰이지 않는 폰트 부분

0

465

1

readmore 클릭시 쿼리내용 받아오는게 이해가 안되요

0

497

1

$_GET과 $_POST를 구별하여야한다고 하는데 이건 왜 $_GET입니까 콜백이라서 그런가요? 왜콜백은 그래도 되나요?

0

475

1

xdebug 설치가 안됩니다.

0

401

1

xdebug 설치 확인 페이지가 안열립니다

0

360

1

if ~ elseif ~ else 문법 표준적인 코딩 방법에 대한 질문입니다.

1

523

1

mysqli_stmt_close($stmt) 관련 질문드립니다.

0

319

1

DB_CONNECTION 부분 질문

0

267

1

FILTER_VALIDATE FILTER_SANITIZE 차이를 모르겠습니다.

0

296

1

결과 ...

0

244

1

random_bytes

0

319

1

preg_replace_callback 질문드립니다.

0

437

1

호스팅에 php 코드 업로드하면 hash 로직이 보이진 않을까요?

0

266

1

버퍼링 궁금한 점이 있습니다.

0

287

1

restore_include_path 오류

0

316

1

php 에러발생..

0

3759

3

터미널로 php 실행시 document root 지정

0

244

1

posts가 null이라고 나옵니다.

0

209

2

rand() vs random_int() 차이점?

0

520

1

php 8 로 하시는 분들을 위한 ini 팁

1

513

1