인프런 커뮤니티 질문&답변

배성민님의 프로필 이미지
배성민

작성한 질문수

PHP 7+ 프로그래밍: 객체지향

36강 메인 에서 부터 좀 문제가 있는거 같은데... 어디가 문제인지 모르겠네요

해결된 질문

작성

·

155

1

38강까지 계속 보면서 따라하고 코딩도 같이 하고있는중인데요..

 

의문점이 드는 부분이 풀리지 않아서 또 글을 남깁니다.

 

아래의 화면캡쳐 해놓은것을 보시게되면..

$VIEW 의 파일들을 읽기는 하는데....

php 구문만 시작할때부터.. 뒤에 소스들이 작동을 안하는데요..

 

다른 에러라도 있는지 확인해보려고 일부러

require_once 를 include 로 바꾸고 실행을 해도 똑같은데..

 

이부분은 뭐가 잘못된건지 당췌 알수가 없네요..

정상적이라면 뒤에 나오는  

 

README 버튼이 떠야하는데.. 

그전에 소스코드가 멈춰버려서... 

 

혹시나 오타난것이 있나 싶어서 

 

강사님 깃허브의 내용을 문서 비교프로그램인 비욘드 컴페어로도 일일이 다 확인해봤지만..

 

문제가없고,, db 연결하고는 좀 별개의 문제 같아서...

나머지 뒷 강의를 보고 따라한다고 하더라도.. 결과화면을 볼수가 없으니..

많이 답답하군용...

 

어디부터 잘못된건지도 알수가 없어서.... 일단 질문드려봅니다.

 

답변 2

1

정상우님의 프로필 이미지
정상우
지식공유자

$$ 형태로 선언하는 것은 PHP 에서 제공하는 가변 변수(Variable variables)라는 기능입니다. 다른 변수의 값을 사용하여 변수의 이름으로 변수를 선언할 수 있습니다. 무슨 말인지 헷갈리겠지만, 이는 언어에서 제공하는 기능 중 하나입니다. PHP 는 여러모로 규칙이나 제약에서 자유롭기 때문에 할 수 있는 일이죠.

가변 변수 기능은 <PHP 7+ 프로그래밍> 강의에서 이야기하긴 했었지만, 비즈니스 로직에서 자주 쓰이는 기능은 아니라 안 쓰면 잊어버리는 기능 중 하나입니다. 다만, Eclair 를 만드는 과정은 프레임워크를 제작하는 것인 만큼, 일반적으로 비즈니스 로직을 작성하는 것과는 상황이 다른 것입니다.

<?php

$var = [
    "hello" => "world"
];

foreach ($var as $name => $value) {
    $$name = $value;
}

var_dump($hello); // "world"

 

배성민님의 프로필 이미지
배성민
질문자

<PHP 7+ 프로그래밍> 강의는 듣지 못했지만..

새로운 멋진 기능이군여..

알려주셔서 감사합니다.~

1

정상우님의 프로필 이미지
정상우
지식공유자

안녕하세요. 이 화면만 봐서는 IndexController::index() 에서 $posts 변수 전달 측면에 문제가 발생해서 출력이 안되었다는 느낌 밖에 들지 않습니다. 저도 분명한 이유는 알 수 없긴합니다만, resources/views/index.php  를 보았을 때, <ul> 까지는 일단 출력이 되었고, <?php foreach ($posts as $post): ?> 에서 문제가 발생한 듯 보입니다. 포스트가 없더라도 $posts 가 올바르게 전달되었다면 빈 배열로 유지되어 </ul> 도 올바르게 출력되었을 것입니다.

//// app/Controllers/IndexController.php

class IndexController
{
    /**
     * Show Posts (GET)
     *
     * @param int $page
     */
    public static function index()
    {
        $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT) ?: 0;

        return Theme::view('index', [
            'posts' => IndexService::getPosts($page, 3)
        ]);
    }
}

//// resources/views/index.php

<div id="main__index" class="uk-container">
    <ul class="uk-list">
        <?php foreach ($posts as $post) : ?>
        <li>
            <article class="uk-article">
                <h1 class="uk-article-title">
                    <a href="/posts/<?=$post->id?>" class="uk-link-reset"><?=$post->title?></a>
                </h1>
                <div class="uk-text-meta">by <?=$post->getUsername()?></div>
                <p class="uk-margin"><?=$post->getSummary()?></p>
                <div class="uk-text-meta"><?=$post->getCreatedAt()?></div>
                </article>
            <hr />
        </li>
        <?php endforeach; ?>
    </ul>
</div>
<button id="readmore" class="uk-button uk-button-default">Read more</button>

 

배성민님의 프로필 이미지
배성민
질문자

 

eclair 프레임웍을 만들때 thema.php 에서 제가 오타를 낸것이 있었네요...

궁금한부분이 생겼습니다.

/////       eclair\src\Support\Theme.php

<?php

namespace Eclair\Support;

class Theme
{
    private static $layout;

    public static function setLayout($layout)
    {
        self::$layout = $layout ;
    }

    public static function view($view , $var = [])
    {
        foreach ($var as $name => $value ) {
            $$name = $value;
        }
        return require_once self::$layout;
    }

}

 

foreach 문 안에 $$name 을 $name 으로 해놓았던부분이 

문제를 일으킨것 같았습니다.

여기서 $$name 을 쓰셨는데 $$변수명으로 하신 특별한 이유가 있는지 궁금하네요..

이렇게 변수명을 지정해본적이 없어서..

 

 

 

배성민님의 프로필 이미지
배성민

작성한 질문수

질문하기