PHP에서 sprintf 함수를 사용하는 이유는 무엇입니까?


188

PHP 함수 sprintf ()에 대해 더 배우려고하지만 php.net이 여전히 혼란스러워서 도움이되지 않았습니다. 왜 그것을 사용하고 싶습니까?

아래의 예를 살펴보십시오.

이것을 사용하는 이유 :

$output = sprintf("Here is the result: %s for this date %s", $result, $date);

이것이 동일하고 IMO 작성이 더 쉬운 경우 :

$output = 'Here is the result: ' .$result. ' for this date ' .$date;

여기에 뭔가 빠졌습니까?


40
+1, 좋은 질문입니다. 나는 거의 그것을 직접 사용하지 않으므로 답을보고 싶습니다.
zombat

6
주 당신의 두 예제는 동일하지 있음 : 첫 번째는 단순히 그 결과를 할당 $output번째는 동안, echo그것을이야.
Daniel Pryden

나는 많은 것들을 연결할 때 개인적으로 사용합니다. 가독성을 위해 주로 유용하다는 것을 알게 된 것은 사실입니다.
AlexMorley-Finch

답변:


130

sprintf 는 원본 printf의 모든 서식 기능을 갖추고 있으므로 문자열에 변수 값을 삽입하는 것 이상의 작업을 수행 할 수 있습니다.

예를 들어 숫자 형식 (16 진수, 10 진수, 8 진수), 소수, 패딩 등을 지정하십시오. printf 용 Google을 사용하면 많은 예를 찾을 수 있습니다. printfwikipedia 기사 를 시작해야합니다.


46
몇 년 전 제로 패딩 숫자에 대한 멋진 함수를 작성했습니다. 내가 단순히 할 수 있다는 것을 깨닫기 전에 sprintf('%03d', $num)
DisgruntledGoat

5
PHP sprintf는 모든 포맷 기능을 가지고 있습니다 ... 실제로 중요한 것은 누락되었습니다 %,8d. 스타일 number_format은 사용 이 덜 편리합니다 printf.
e2-e4

3
@DisgruntledGoat 해당 형식 문자열 ( '% 03d')을 분류 할 수 있습니까? 정말 도움이 될 것 같아요. 감사.
씨 미스터

3
표시 할 인수를 반복하고 재정렬 할 수도 있습니다. 예를 들면 sprintf('%2$s %1$s, my name is also %1$s.', 'World', 'Hello');결과Hello World, my name is also World.
fyrye을

77

sprintf에 대한 많은 사용 사례가 있지만 내가 사용하는 한 가지 방법은 다음과 같은 문자열을 저장하는 것입니다. '안녕하세요, 내 이름은 % s'입니다. 데이터베이스에 또는 PHP 클래스의 상수입니다. 그 문자열을 사용하고 싶을 때 간단히 이렇게 할 수 있습니다.

$name = 'Josh';
// $stringFromDB = 'Hello, My Name is %s';
$greeting = sprintf($stringFromDB, $name);
// $greetting = 'Hello, My Name is Josh'

본질적으로 코드에서 약간의 분리가 가능합니다. 내 코드의 여러 위치에서 'Hello, My Name is % s'를 사용하면 한 곳에서 '% s is my name'(으)로 변경할 수 있으며 각 인스턴스로 이동하거나 이동하지 않고도 다른 곳에서 자동으로 업데이트됩니다. 연결.


8
이. 이제 번호가 매겨진 인수와 번역을 추가하십시오 :]
Konerak

46

다른 용도 sprintfsprintf형식화 된 문자열에 나타나는 순서대로 배열 될 필요가없는 인수로 현지화 된 응용 프로그램에서 됩니다.

예:

$color = 'blue';
$item = 'pen';

sprintf('I have a %s %s', $color, $item);

그러나 프랑스어와 같은 언어는 단어를 다르게 주문합니다.

$color = 'bleu';
$item = 'stylo';

sprintf('J\'ai un %2$s %1$s', $color, $item);

(예, 프랑스어가 짜증납니다 : 학교에서 독일어를 배웠습니다!)

실제로는 gettext 를 사용하여 지역화 된 문자열을 저장하지만 아이디어를 얻습니다.



37

번역하기가 더 쉽습니다.

echo _('Here is the result: ') . $result . _(' for this date ') . $date;

번역 (gettext) 문자열은 다음과 같습니다.

  • 결과는 다음과 같습니다.
  • 이 날짜에

다른 언어로 번역 할 때 불가능하거나 매우 이상한 문장이 될 수 있습니다.

지금 가지고 있다면

echo sprintf(_("Here is the result: %s for this date %s"), $result, $date);

번역 (gettext) 문자열은 다음과 같습니다.

  • 결과는 다음과 같습니다.이 날짜의 % s % s

훨씬 더 의미가 있고 다른 언어로 번역하는 것이 훨씬 더 유연합니다.


1
나는이 일이 매우 유용 할 것이다 어디에 있는지
JasonDavis

6
번역을 위해 아마 사용 위치 지정자에 더 좋을 것이지만 즉, 변환 할 때, 몇 가지 추가적인 유연성을 제공합니다 : echo sprintf(_("Here is the result: %1$s for this date %2$s"), $result, $date);즉, 번역 등의 문구를 수정할 수있는 것For the date %2$s, the result is %1$s
PatrikAkerstrand

1
원래 문자열에없는 경우에도 번역에 넣을 수 있으며 작동합니다.
스펙트럼

17

내가 찾은 가장 좋은 이유는 언어 파일에 모든 언어 문자열을 배치하여 사람들이 필요에 따라 번역하고 순서를 지정할 수 있었기 때문에 문자열의 형식에 관계없이 표시하려는 것입니다. 사용자 이름

예를 들어 사이트 상단에 "[[User]] 님을 환영합니다"라고 표시됩니다. 프로그래머 는 UI 사용자가 어떻게 작성하는지 알지 못 하거나 신경 쓰지 않습니다 . 사용자 이름이 메시지의 어딘가에 표시 될 것입니다.

따라서 메시지가 실제로 무엇인지 걱정하지 않고 코드에 메시지를 포함시킬 수 있습니다.

랭 파일 (EN_US) :

...
$lang['welcome_message'] = 'Welcome back %s';
...

그런 다음 실제 PHP 코드에서이를 사용하여 모든 언어로 모든 유형의 메시지를 지원할 수 있습니다.

sprintf($lang['welcome_message'], $user->name())

언어 파일에 대해 걱정할 필요는 없었지만 이것은 나에게 가장 유용한 용도 중 하나 인 것 같습니다
JasonDavis

이 예제는 많은 다중 언어 응용 프로그램을 수행하지 않았기 때문에 나에게 완벽하게 이해되었습니다.
MKN 웹 솔루션

9

왜 그것을 사용하고 싶습니까?

언어 문자열에 (외부) 소스를 사용할 때 매우 유용합니다. 주어진 다국어 문자열에 고정 된 수의 변수가 필요한 경우 올바른 순서 만 알고 있으면됩니다.

en.txt

not_found    = "%s could not be found."
bad_argument = "Bad arguments for function %s."
bad_arg_no   = "Bad argument %d for function %s."

hu.txt

not_found    = "A keresett eljárás (%s) nem található."
bad_argument = "Érvénytelen paraméterek a(z) %s eljárás hívásakor."
bad_arg_no   = "Érvénytelen %d. paraméter a(z) %s eljárás hívásakor."

삽입 된 변수는 여러 언어의 시작 또는 끝에있을 필요조차 없으며 순서 만 중요합니다.

물론 약간의 성능 향상에도 불구 하고이 대체를 수행하는 자체 함수를 작성할 수는 있지만 언어 문자열을 읽을 수있는 클래스가있는 경우Language 훨씬 빠릅니다 .

/**
 * throws exception with message($name = "ExampleMethod"):
 *  - using en.txt: ExampleMethod could not be found.
 *  - using hu.txt: A keresett eljárás (ExampleMethod) nem található.
 */
throw new Exception(sprintf(Language::Get('not_found'), $name));

/**
 * throws exception with message ($param_index = 3, $name = "ExampleMethod"):
 *  - using en.txt: Bad argument 3 for function ExampleMethod.
 *  - using hu.txt: Érvénytelen 3. paraméter a(z) ExampleMethod eljárás hívásakor.
 */
throw new Exception(sprintf(Language::Get('bad_arg_no'), $param_index, $name));

또한의 모든 기능과 함께 제공 printf되므로 다음과 같이 다양한 유형의 변수를 형식화하기위한 단일 라이너입니다.


8

언급했듯이 입력 데이터의 형식을 지정할 수 있습니다. 예를 들어, 2dp, 4 자리 숫자 등을 강제하는 등 MySQL 쿼리 문자열을 작성하는 데 매우 유용합니다.

또 다른 장점은 거의 매개 변수를 입력하는 것과 같이 문자열 레이아웃을 공급되는 데이터와 문자열 레이아웃을 분리 할 수 ​​있다는 것입니다. 예를 들어 MySQL 쿼리의 경우 :

// For security, you MUST sanitise ALL user input first, eg:
$username = mysql_real_escape_string($_POST['username']); // etc.
// Now creating the query:
$query = sprintf("INSERT INTO `Users` SET `user`='%s',`password`='%s',`realname`='%s';", $username, $passwd_hash, $realname);

이 방법은 물론 HTML로 출력을 인쇄 할 때와 같은 다른 용도로 사용됩니다.

편집 : 보안상의 이유로 위의 기술을 사용할 때 MySQL 삽입 공격을 방지 하기 위해이 방법을 사용하기 전에 모든 입력 변수를 위생 처리해야합니다mysql_real_escape_string() . 비 염소 입력을 구문 분석하면 사이트와 서버가 해킹 됩니다. (물론 코드에 의해 완전히 구성되고 안전하다는 보장은 제외합니다.)


2
이 코드는 SQL 삽입에 취약합니다. 보간을 쿼리하지 말고 자리 표시자를 사용하십시오!
duskwuff -inactive-

@duskwuff-그대로 사용합니다. 죄송합니다. 답변을 수정했습니다.
Samuel Jaeschke

7

사용 ) (의 sprintf를 문자열을 포맷하는 것이 훨씬 깨끗하고 안전합니다.

예를 들어 입력 변수를 처리 할 때는 예상 형식을 미리 지정하여 예기치 않은 놀라움을 방지합니다 (예 : 문자열 [ %s] 또는 숫자 [ %d]). 이는 잠재적으로 SQL 삽입 위험에 도움이 될 수 있습니다 있지만 문자열이 따옴표로 구성되어 있으면 막을 수 없습니다.

또한 실수를 처리하는 데 도움이됩니다. 숫자 정밀도를 명시 적으로 지정할 수 있습니다 (예 : %.2f 이되며 변환 기능을 사용하지 못하게하는 .

다른 장점은 대부분의 주요 프로그래밍 언어가 자체 구현되어 있다는 것입니다 sprintf() 되어 있다는 점입니다. 일단 익숙해지면 새로운 언어를 배우는 대신 (문자열을 연결하거나 부동 소수점을 변환하는 방법) 사용하기가 훨씬 더 쉽습니다.

요약하면, 더 깨끗하고 읽기 쉬운 코드를 만들기 위해 사용하는 것이 좋습니다.

예를 들어 아래 실제 예를 참조하십시오 .

$insert .= "('".$tr[0]."','".$tr[0]."','".$tr[0]."','".$tr[0]."'),";

또는 예를 들어 인쇄하는 간단한 예 '1','2','3','4':

print "foo: '" . $a . "','" . $b . "'; bar: '" . $c . "','" . $d . "'" . "\n";

포맷 된 문자열로 인쇄 :

printf("foo: '%d','%d'; bar: '%d','%d'\n", $a, $b, $c, $d);

where printf()는와 동일 sprintf()하지만 변수로 반환하는 대신 형식이 지정된 문자열을 출력합니다.

더 읽기 쉬운 것은 무엇입니까?


1
나는 동의하지 않지만 6-7 년 전에이 질문을하고 그 이후로 이것을 사용했다는 것을 다시 한번 생각할 수 없다고 언급 할 가치가 있습니다! 나는 언젠가 그것을위한 장소를 찾고 희망하며 장소가 있지만 수년 전에이 질문을 한 이후로 그것을 사용하지 않았다고 생각하는 것이 재미 있다고 생각합니다!
JasonDavis

PHP에서 PDO 변수를 설정하는 것과 다소 비슷하다고 말할 수 있습니다. 또한 가독성 인수를 제공하려면 sprintf()자리 표시자가있는 문자열이 1 줄이고 값이 그 아래 줄 또는 여러 줄인 여러 줄로 나누기를 선호 합니다. 강좌. 내가 설명한 방식으로 데모 사용하기 ... i.imgur.com/DFi3ur8.png
JasonDavis

저장 프로 시저와 함께 준비된 문은 sprintf가 아닌 SQL 주입을 방지하는 가장 좋은 방법입니다. 문자열에 작은 따옴표가 포함되어 있으면 sprintf를 사용하여 SQL을 쉽게 주입 할 수 있습니다.
HumbleWebDev

4

내가 최근에 사용하지 않았다면 나는 똑같은 일이지만. 사용자 입력을 기반으로 문서를 생성 할 때 편리합니다.

"<p>Some big paragraph ".$a["name"]." again have tot ake care of space and stuff .". $a["age"]. "also would be hard to keep track of punctuations and stuff in a really ".$a["token"]. paragarapoh.";

WHich는 다음과 같이 쉽게 쓸 수 있습니다

sprintf("Some big paragraph %s. Again have to take care of space and stuff.%s also wouldnt be hard to keep track of punctuations and stuff in a really %s paragraph",$a,$b,$c);

또는 이렇게 할 수 있습니다 : "<p>Some big paragraph {$a['name']} more words {$a['age']}</p>". 그러나 사용자 입력을 삭제하거나 XSS 취약성까지 코드를 여는 것을 잊지 마십시오.
thirdender dec

HEREDOC 구문을 사용할 수도 있습니다 . 제 생각에는 두 가지 모두 sprintf 구문보다 읽기 쉽습니다.
thirdender dec

4

이:

"<p>Some big paragraph ".$a["name"]." again have to take care of space and stuff .". $a["age"]. "also would be hard to keep track of punctuations and stuff in a really ".$a["token"]. paragraph.";

또한 쓸 수 있습니다 :

"<p>Some big paragraph {$a['name']} again have to take care of space and stuff .{$a['age']} also would be hard to keep track of punctuations and stuff in a really {$a['token']} paragraph.";

내 의견으로는 이것이 더 명확하지만 지역화 또는 형식화에 대한 사용을 볼 수 있습니다.


3

일반적인 경우 중 일부는 출력 형식을보다 정확하게 제어해야하는 경우입니다. 예를 들어 길이에 따라 특정 값에 특정 양의 공백이 앞쪽에 채워지거나 숫자가 특정 정확한 형식으로 출력되는지 확인하는 것이 까다로울 수 있습니다.

PHP 매뉴얼 에는 많은 예제 가 있습니다

또한 "쓰기가 더 쉬워진다"는 예를 들어 보자. 에코는 쓰기가 쉽지만, 특히 변수가 많은 경우 sprintf를 읽기가 더 쉽다.

sprintf 또는 printf를 사용하는 또 다른 이유는 사용자가 특정 값의 출력 형식을 정의하도록하려는 것입니다. sprintf 호환 가능 출력 형식을 안전하게 정의 할 수 있습니다.

아, 그리고 당신의 예는 실제로 한 부분에 잘못되었습니다. sprintf문자열을 반환하지만 echo그렇지는 않습니다. echo즉각 문자열을 출력하고 아무 것도 반환하지 않고 반환 만합니다 sprintf.


3
  1. C / C ++를 사용했다면 sprintf 함수에 익숙 할 것입니다.

  2. 두 번째 줄의 효율성이 떨어질 가능성이 높습니다. Echo는 출력 명령으로 설계되었지만 sprintf는 문자열 토큰 대체를 수행하도록 설계되었습니다. 나는 PHP 사람이 아니지만 에코와 관련된 객체가 더 있다고 생각합니다. Java처럼 작동하면 목록에 무언가가 추가 될 때마다 새로운 문자열을 생성하므로 4 개의 문자열이 생성됩니다.


최신 버전의 Java는 문자열 연결을 배후의 StringBuilder로 변환합니다.
RodeoClown

1
PHP의 문자열은 객체가 아닙니다. 두 번째 예는 함수 호출 대신 언어 구성을 사용하므로 눈에 띄게 더 빠릅니다.
Tamlyn

3

때때로 나는 이것과 비슷한 것을 얻었습니다.

$fileName = sprintf('thumb_%s.%s', 
                    $fileId,
                    $fileInfo['extension']);

3

나는 일반적으로 sprintf를 사용하여 사용자 입력에서 오는 ID가 정수인지 확인합니다.

// is better use prepared statements, but this is practical sometimes
$query = sprintf("SELECT * from articles where id = %d;",$_GET['article_id']);

또한 기본 템플릿 (html 메일 또는 기타 사항)을 수행하는 데 사용되므로 여러 위치에서 템플릿을 재사용 할 수 있습니다.

$mail_body = "Hello %s, ...";
$oneMail = sprintf($mail_body, "Victor");
$anotherMail = sprintf($mail_body, "Juan");

다른 표현 (8 진수, 소수점 이하 자릿수 제어 등)으로 숫자의 서식을 지정하는 것도 매우 유용합니다.


intval ($ _ GET [ "article_id"])을 사용하는 것이 쉽지 않습니까? 음, 사실 그것은 더 입력했다 ... *주의 사항 귀하의 방법 "다그 nabbit 아래로.
user97410

이 유형의 코드의 경우 내장 mysql_real_escape_string ()을 사용하는 것이 좋습니다. $ query = sprintf ( "ID = % d;", ​​mysql_real_escape_string ($ _ GET [ 'article_id']));
bruno.braga

3
define('TEXT_MESSAGE', 'The variable "%s" is in the middle!');

sprintf(TEXT_MESSAGE, "Var1");
sprintf(TEXT_MESSAGE, "Var2");
sprintf(TEXT_MESSAGE, "Var3");

3

sprintf는 숫자를 사용하는 문자열을 형식화 할 때 특히 유용합니다. 예를 들어

$oranges = -2.34;
echo sprintf("There are %d oranges in the basket", $oranges);

Output: There are -2 oranges in the basket

주황색은 정수 (-2)로 형식화되지만 부호없는 값에 % u를 사용하면 양수로 줄 바꿈됩니다. 이 동작을 피하기 위해 절대 함수 abs ()를 사용하여 다음과 같이 숫자를 0으로 반올림합니다.

$oranges = -5.67;
echo sprintf("There are %d oranges in the basket", abs($oranges));

Output: There are 5 oranges in the basket

최종 결과는 높은 가독성, 논리적 구성, 명확한 형식화 및 필요에 따라 추가 변수를 추가 할 수있는 유연성을 갖춘 진술입니다. 이러한 변수를 조작하는 함수와 함께 변수의 수가 증가함에 따라 이점이 더 분명해집니다. 마지막 예로서 :

$oranges = -3.14;
$apples = 1.5;
echo sprintf("There are %d oranges and %d apples", abs($oranges), abs($apples));

Output: There are 3 oranges and 4 apples

sprintf 문의 왼쪽에는 문자열과 예상 값 유형이 명확하게 표시되고 오른쪽에는 사용 된 변수와 조작 방법이 명확하게 표시됩니다.


필자는 PHP에서 가장 중요한 부분 인 "sprintf는 숫자를 사용하는 문자열을 형식화 할 때 특히 유용합니다"라는 명쾌한 첫 번째 문장에 대한 귀하의 답변을 찬성하려고 sprintf했지만, 그 결여 된 예제를보고 "누락"에서 결실을 맺었습니다. 과일 :), 각각의 반복만을 보여주는 %d(그리고 abs()대신 숫자 서식 옵션의 과다 (이 중 일부를 보여주는의 주제에 관련이있는) 관련), 내 마음을 바 꾸었습니다. 그러나 답변을 업데이트해도 여전히 냉장고에 내 의견이 남아 있습니다. :) Thx, 건배!
Sz.

3

잘, sprintf 우리가 아래와 같이 많은 기능을 가지고 있습니다 :

나는 전에 몇 달 시간에 초를 변환을 필요로했다 : 분 :처럼 초 형식으로 $t = 494050 //seconds내가 좋아하는 인쇄 싶어 137 h 14 m 10 s내가 PHP 함수를 내놓았다 그래서 springf()난 그냥 초를 보유 $t하고 echo sprintf("%02d h %s%02d m %s%02d s", floor($t/3600), $f, ($t/60)%60, $f, $t%60);나를 준다137 h 14 m 10 s

sprintf () 함수는 사용법을 알고 있으면 매우 유용합니다.


2

인수는 템플릿을 사용하는 것과 같습니다. Textsleev를 실제 변수 값과 분리하고 싶을 것입니다. 우리가 언급 한 sprintf의 추가 기능 외에도 스타일 일뿐입니다.


2

sprintf를 사용하는 정말 좋은 사용 사례는 패딩 형식의 숫자를 출력하고 문자열에서 다른 유형을 혼합하는 경우입니다. 많은 경우에 읽기가 더 쉬울 수 있으며 같은 변수, 특히 숫자로 된 다른 표현을 인쇄하는 것이 매우 간단합니다.


2

일반 연결보다 sprintf () 함수를 사용하면 연결할 변수에 다른 형식의 서식을 적용 할 수 있다는 이점이 있습니다.

귀하의 경우에는

$output = sprintf("Here is the result: %s for this date %s", $result, $date);

$output = 'Here is the result: ' .$result. ' for this date ' .$date;

우리가 보자 $result = 'passed'; date = '23rd';

일반 연결을 사용하면 출력 만 얻을 수 있습니다.

Here is the result: passed for this date 23rd

그러나 사용 sprintf()하면 다음과 같은 수정 된 출력을 얻을 수 있습니다.

$output = sprintf('Here is the result: %.4s for this date %.2s',$result,$date);
echo $output;

산출:

Here is the result: pass for this date 23

2

sprintf()와 매우 유사합니다 printf(). 당신이 알고있는 경우 printf()다음 사항에 sprintf()심지어vsprintf() 정말 이해하기 어렵지 않다.

것들 중 하나는 다르다는 점 sprintf()에서이 printf()직접적 인쇄되지 않는 한 당신은 / 기능의 출력을 잡으려고 에코 아무 것도 변수를 선언 할 필요가 것입니다. 다음 코드 스 니펫을 보자.

printf("Hello %s", "world"); // "Hello world"

sprintf("Hello %s", "world"); // does not display anything

echo sprintf("Hello %s", "world"); // "Hello world"

$a = sprintf("Hello %s", "world"); // does not display anything

echo $a;// "Hello world"

희망이 도움이됩니다.



0

루프에서 sprintf를 사용할 때주의해야합니다.

$a = 'Anton';
$b = 'Bert';
$c = 'Corni';
$d = 'Dora';
$e = 'Emiel';
$f = 'Falk';
$loops = 10000000;

$time = microtime(true);

for ($i = 0; $i < $loops; $i++)
{
    $test = $a . $b . $c . $d . $e . $f;
}

$concatTime = microtime(true) - $time;

$time = microtime(true);

for ($i = 0; $i < $loops; $i++)
{
    $test = "$a $b $c $d $e $f";
}

$concat2Time = microtime(true) - $time;

$time = microtime(true);

for ($i = 0; $i < $loops; $i++)
{
    $test = sprintf('%s %s %s %s %s %s', $a, $b, $c, $d, $e, $f);
}

$sprintfTime = microtime(true) - $time;

echo 'Loops: ' . $loops . '<br>';
echo '\'$a . $b . $c . $d . $e . $f\'' . ' needs ' . $concatTime  . 's<br>';
echo '"$a $b $c $d $e $f"' . ' needs ' . $concat2Time  . 's<br>';
echo 'sprintf(\'%s %s %s %s %s %s\', $a, $b, $c, $d, $e, $f)' . ' needs ' . $sprintfTime  . 's<br>';

다음과 같은 시간이 발생합니다 (PHP 7.2가있는 로컬 컴퓨터에서).

루프 : 10000000

'$ a. $ b. $ c. $ d. $ e. $ f '는 1.4507689476013s가 필요합니다

"$ a $ b $ c $ d $ e $ f"에는 1.9958319664001s가 필요합니다.

sprintf ( '% s % s % s % s % s % s', $ a, $ b, $ c, $ d, $ e, $ f) 필요 9.1771278381348s


0

사용자에게 보내는 메시지 나 다른 "예쁜"기능에 사용합니다. 예를 들어 내가 사용자 이름을 사용한다는 것을 알고 있다면.

$name = 'Some dynamic name';

그리고 그 상황에서 사용할 메시지가 여러 개 있습니다. (즉, 다른 사용자를 차단하거나 팔로우)

$messageBlock = 'You have blocked %s from accessing you.';
$messageFollow = 'Following %s is a great idea!';

사용자에게 무언가를 수행 하고이 문자열을 추가하는 일반 함수를 만들 수 있으며 문장의 구조에 관계없이 매우 멋지게 보일 수 있습니다. 나는 항상 문자열을 함께 붙이는 것을 좋아하지 않고 점 표기법을 사용하고 문자열을 닫고 다시 열어 문장을보기 좋게 만듭니다. 나는 처음에는 팬 이었지만 여러 문자열을 조작해야하고 매번 변수의 배치를 하드 코딩하고 싶지 않을 때 매우 유용합니다.

생각 해봐, 무엇이 더 좋아 보이는가?

return $messageOne === true ? $name.'. Please use the next example' : 'Hi '.$name.', how are you?'

또는

$message = $messageOne === true ? 'Option one %s' 
: ($messageTwo === true ? 'Option Two %s maybe?' : '%s you can choose from tons of grammatical instances and not have to edit variable placement and strings');

return sprintf($message, $name);

추가 단계가 필요하지만 조건부 검사가 다른 많은 기능을 수행하는 경우 인용 부호와 추가 기능이 기능적으로 코딩되기 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.