본 게시글은 유튜브 생활코딩 온라인강의를 시청한 후 학습한 정보를 기록하는 목적의 게시글입니다.

생각의 흐름에 따라 작성된 게시글입니다. 가독성이 떨어질 수 있습니다.

생활코딩 유튜브

 

생활코딩

일반인에게 프로그래밍을 알려주는 온라인/오프라인 활동 입니다.

www.youtube.com

생활코딩 사이트

 

생활코딩

hello world 생활코딩의 세계에 오신 것을 환영합니다. 생활코딩은 일반인들에게 프로그래밍을 알려주는 무료 온라인, 오프라인 수업입니다.  어떻게 공부할 것인가를 생각해보기 전에 왜 프로그래밍을 공부하는 이유에 대한 이유를 함께 생각해보면 좋을 것 같습니다. 아래 영상을 한번 보시죠. 온라인 강의 소개 입문자의 가장 큰 고충은 '무엇을 모르는지 모르는 상태'일 겁니다. 온라인에는 프로그래밍을 익히는 데 필요한 거의 모든 정보가 있지만, 이 지식들은

opentutorials.org

생활코딩 WEP3 PHP & MySQL을 수강하기 위한 선수과목인

WEB2 - PHPDATABASE2 - MySQL에 대한 수강 기록입니다.

수강 일정은 야학의 수강계획표에 따릅니다.


#0.

우리는 지금까지 PHP에서 기본적으로 제공되는 내장함수를 사용하는 법을 살펴보았다.

그래서 이제는 우리가 직접 함수를 만들어 사용하는, 함수의 소비자에서 생산자로 한걸음 나아가고자 한다.

PHP에서 함수륻 다루는 법은 이곳을 참조하자.

 

PHP: Functions - Manual

There are no user contributed notes for this page.

www.php.net

 

#1-0.

PHP에서 USER가 함수를 정의하는 방법은 이곳을 참조하면 된다.

 

PHP: User-defined functions - Manual

 

www.php.net

<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Example function.\n";
    return $retval;
}
?>

그 예시를 살펴보면 다른 함수와 클래스 정의를 포함하여 함수 안아 나타낼 수 있음을 알 수 있따.

 

PHP: The Basics - Manual

CLASSES and OBJECTS that represent the "Ideal World"Wouldn't it be great to get the lawn mowed by saying $son->mowLawn()? Assuming the function mowLawn() is defined, and you have a son that doesn't throw errors, the lawn will be mowed. In the following exa

www.php.net

이는 곳 아래의 코드들 처럼 함수안에 조건문을 사용하거나, 함수 안에 다른 함수를 내장할 수 있음을 의미한다.

// 조건부
<?php

$makefoo = true;

bar();

if ($makefoo) {
  function foo()
  {
    echo "I don't exist until program execution reaches me.\n";
  }
}

if ($makefoo) foo();

function bar() 
{
  echo "I exist immediately upon program start.\n";
}

?>

// 함수 안의 함수
<?php
function foo() 
{
  function bar() 
  {
    echo "I don't exist until foo() is called.\n";
  }
}

foo();


bar();

?>

PHP는 PHP의 모든 함수와 클래스는 전역 범위를 갖는다.

내부에서 정의 된 경우에도 함수 외부에서 호출할 수 있으며, 그 반대의 경우도 마찬가지이다.

여기서 주의해야 할 사안은, PHP에서 함수 오버로딩을 지원하지 않으며,

이전에 선언 된 함수를 정의 해제하거나 재정의 할 수 없다는 사실이다.

이 정도의 개념적인 지식을 보충하고 다시 강의로 돌아가자.

 

#1-1.

<?php
	function basic(){
    	print("Lorem ipsum dolor1<br>");
    	print("Lorem ipsum dolor2<br>");
	}
	basic();
	basic();
	basic();
?>

PHP에서 basic이란 함수는 두 문장을 print하는 것이라 선언한 이후,

그 함수를 호출함으로써 함수에 정의된 내용을 사용할 수 있다.

물론 다른 php코드에서 이 함수를 호출해도 동일한 기능으로 동작한다.

<?php
	function basic(){
       	print("Lorem ipsum dolor1<br>");
       	print("Lorem ipsum dolor2<br>");
   	}
?>
<?php
   	basic();
   	basic();
   	basic();
?>

 

#1-2.

1-1. 에서 만든 함수는 항상 동일한 기능을 동작한다.

이 함수에 값을 넘겨줌으로써 값에 따라 다른 결과값을 표현하도록 만들 수도 있다.

이 때 사용할 수 있는 것이 parameter와 argument이다.

공식문서는 이곳을 참조하자.

 

PHP: Function arguments - Manual

PASSING A "VARIABLE-LENGTH ARGUMENT LIST OF REFERENCES" TO A FUNCTIONAs of PHP 5, Call-time pass-by-reference has been deprecated, this represents no problem in most cases, since instead of calling a function like this:   myfunction($arg1, &$arg2, &$arg3

www.php.net

<?php 
  function sum($left, $right){
    print($left+$right);
    print("<br>");
  }
  sum(2,4);
  sum(4,6);
?>

위의 코드를 확인해보면 6과 10이 출력되는 것을 확인할 수 있다.

$left와 $right가 parameter이고 sum함수를 호출할 때 사용한 2, 4, 4, 6이 argument이다.

 

#1-3.

이 때까지 함수를 입력하는 과정에 대해서 살펴보았다.

함수의 출력값 역시 다른 함수에서 사용할 수 있다.

<?php 
  function sum2($left, $right){
    return $left+$right;
  }
  print(sum2(2,4));
  file_put_contents('result.txt', sum2(2,4));
?>

sum2함수는 이전에 정의한 sum과 달리 출력하는 부분이 없다.

하지만 return을 통해 $left와 $right의 합을 반환하고 있다.

 

PHP: return - Manual

Note that because PHP processes the file before running it, any functions defined in an included file will still be available, even if the file is not executed. Example: a.php b.php

print함수를 보면 2와 4의 값을 받아서 6을 출력하고 있는 것을 확인할 수 있는데,

이는 곧 ` file_put_contents('result.txt', sum2(2,4)); ` 란, ` file_put_contents('result.txt', 6); ` 으로

동작함을 의미한다.

 

#2.

이전까지 배운 함수의 형식을 활용하여, 우리의 app에 도입해보자.

현재코드

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
        $list = scandir('./data');
        $i = 0;
        while($i < count($list)){
          if($list[$i] != '.') {
            if($list[$i] != '..') {
              echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
            }
          }
          $i = $i + 1;
        }
      ?>
    </ol>
    <h2>
      <?php
      if(isset($_GET['id'])){
        echo $_GET['id'];
      } else {
        echo "Welcome";
      }
      ?>
    </h2>
    <?php
    if(isset($_GET['id'])){
      echo file_get_contents("data/".$_GET['id']);
    } else {
      echo "Hello, PHP";
    }
     ?>
  </body>
</html>

만약 제목을 표현하는 코드를 <title> 태그에도 삽입한다고 가정해보자.

그렇다면 코드는 아래와 같이 될 것이다.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      if(isset($_GET['id'])){
        echo $_GET['id'];
      } else {
        echo "Welcome";
      }
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
        $list = scandir('./data');
        $i = 0;
        while($i < count($list)){
          if($list[$i] != '.') {
            if($list[$i] != '..') {
              echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
            }
          }
          $i = $i + 1;
        }
      ?>
    </ol>
    <h2>
      <?php
      if(isset($_GET['id'])){
        echo $_GET['id'];
      } else {
        echo "Welcome";
      }
      ?>
    </h2>
    <?php
    if(isset($_GET['id'])){
      echo file_get_contents("data/".$_GET['id']);
    } else {
      echo "Hello, PHP";
    }
     ?>
  </body>
</html>

이런식으로 반복되는 코드가 발생할 때 우리는 함수를 사용할 수 있다.

<!DOCTYPE html>
<html>
  <head>
    <?php
      function print_title(){
        if(isset($_GET['id'])){
          echo $_GET['id'];
        } else {
          echo "Welcome";
        }
      }
    ?>
    <meta charset="utf-8">
    <title>
      <?php
        print_title()
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
        $list = scandir('./data');
        $i = 0;
        while($i < count($list)){
          if($list[$i] != '.') {
            if($list[$i] != '..') {
              echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
            }
          }
          $i = $i + 1;
        }
      ?>
    </ol>
    <h2>
      <?php
        print_title()
      ?>
    </h2>
    <?php
    if(isset($_GET['id'])){
      echo file_get_contents("data/".$_GET['id']);
    } else {
      echo "Hello, PHP";
    }
     ?>
  </body>
</html>

이때까지 우리가 배운 함수의 형식을 응용한다면 이와 같을 것이다.

<?php
function print_title(){
  if(isset($_GET['id'])){
    echo $_GET['id'];
  } else {
    echo "Welcome";
  }
}
function print_description(){
  if(isset($_GET['id'])){
    echo file_get_contents("data/".$_GET['id']);
  } else {
    echo "Hello, PHP";
  }
}
function print_list(){
  $list = scandir('./data');
  $i = 0;
  while($i < count($list)){
    if($list[$i] != '.') {
      if($list[$i] != '..') {
        echo "<li><a href=\"index.php?id=$list[$i]\">$list[$i]</a></li>\n";
      }
    }
    $i = $i + 1;
  }
}
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
      <?php
      print_title();
      ?>
    </title>
  </head>
  <body>
    <h1><a href="index.php">WEB</a></h1>
    <ol>
      <?php
      print_list();
      ?>
    </ol>
    <h2>
      <?php
      print_title();
      ?>
    </h2>
    <?php
    print_description();
     ?>
  </body>
</html>

이렇게 함수를 활용한다면 언제든지 코드를 재사용할 수 있을 뿐더러,

수정 사항이 생겼을 때에도 혁신적으로 시간을 단축할 수 있다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기