본 게시글은 유튜브 생활코딩 온라인강의를 시청한 후 학습한 정보를 기록하는 목적의 게시글입니다.
생각의 흐름에 따라 작성된 게시글입니다. 가독성이 떨어질 수 있습니다.
생활코딩 WEP3 PHP & MySQL을 수강하기 위한 선수과목인
WEB2 - PHP와 DATABASE2 - MySQL에 대한 수강 기록입니다.
수강 일정은 야학의 수강계획표에 따릅니다.
#0.
우리는 지금까지 PHP에서 기본적으로 제공되는 내장함수를 사용하는 법을 살펴보았다.
그래서 이제는 우리가 직접 함수를 만들어 사용하는, 함수의 소비자에서 생산자로 한걸음 나아가고자 한다.
PHP에서 함수륻 다루는 법은 이곳을 참조하자.
#1-0.
PHP에서 USER가 함수를 정의하는 방법은 이곳을 참조하면 된다.
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
?>
그 예시를 살펴보면 다른 함수와 클래스 정의를 포함하여 함수 안아 나타낼 수 있음을 알 수 있따.
이는 곳 아래의 코드들 처럼 함수안에 조건문을 사용하거나, 함수 안에 다른 함수를 내장할 수 있음을 의미한다.
// 조건부
<?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 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의 합을 반환하고 있다.
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>
이렇게 함수를 활용한다면 언제든지 코드를 재사용할 수 있을 뿐더러,
수정 사항이 생겼을 때에도 혁신적으로 시간을 단축할 수 있다.
최근댓글