2014-09-24 9 views
0

현재 데이터베이스에있는 HTML을 기반으로 HTML을 생성하는 스크립트를 작성하고 있는데, 특히 중첩을 표시 할 탭이있는 HTML을 선호합니다. 난 그냥에 CONCATENATE 5 \t 말을 $T(5)을 사용할 수 있도록PHP에서 정의한 인수를 사용하는 함수에 정의 할 수 있습니까?

$T = "addTab"; 

: PHP를 읽기의 편의를 위해

function addTab($inNum) { 
    $out = ""; 
    for ($i = 0; $i < $inNum; $i++) $out .= "\t"; 
    return $out; 
} 

, 나는이 만든 : 나는 탭의 일부 번호를 생성하는 간단한 기능을 가지고 HTML 캐릭터 라인 개인적으로 나는 직관적이지 않은 문자열에 의한 함수를 가리키는 이런 종류의 문법을 발견하고이를 사용하는 함수는 global $T이 필요합니다.

define()을 사용하여 T(5)과 같은 것을 기능 범위 내에서 사용할 수 있습니까?

+0

:

하지만 여전히 변수는 PHP에서 작업하는 기능? '$ T()'는 실제 함수 이름보다 읽기가 어렵다고 느낍니다. –

+1

그냥'function T ($ n) {return addTab ($ n); }'? 나는 정말로 그것을 권하고 싶지 않지만, 당신이 개괄 한 접근 방식과 같은 단점이있다. –

+0

@AlexisKing, 그게 개선이라고 생각합니다. 고마워요. 그래도 호기심이 궁금하다면 – asimes

답변

2

아니요, 원하는 방식으로 "기능 정의"할 수 없습니다.

왜 사용하지 : 당신이 언급 한 바와 같이
function T($inNum) 
{ 
    return addTab($inNum); 
} 

은 그럼 그냥, T(5) 쓸 수 있습니다.

+0

호기심에서 어떻게 할 수 없다고 판단 했습니까? 'T'가'addFunction'을 가리키는 것을 무시하면'T'는'\ t's의 변수 번호를 반환하는'define()'이 될 수 있습니까? ** 편집 ** : 나는 이것과 같은 것이 C (인수를 취하는 정의)에서 수행 될 수 있고 PHP가 동일한 것을 할 수 있는지 궁금해하고 있었다. – asimes

+0

PHP의 런타임 정의는 C처럼 전 처리기 정의가 아니다. PHP의 정의 '$'토큰을 필요로하지 않는 영속화된 전역 변수이며 상수 값으로 만 정의 할 수 있습니다. C의 정의는 본질적으로 단순 복사 - 붙여 넣기 작업입니다. 사전 처리기는 정의 된 토큰 이름을 해당 값으로 바꿉니다. PHP 문서를 다음에서 볼 수있다 : http://php.net/manual/en/function.define.php –

+0

원한다면'define ('T1', addTab (1))','define (' T2 ', addTab (2))'등이 있지만 출력에서 ​​탭을 하드 코딩하는 것보다 이점이 없습니다. 함수가 여러 입력을 기반으로 다양한 수의 탭을 반환하도록하는 전체 목적은 런타임까지 탭 수를 알 수 없다는 것입니다. –

1

define을 사용할 때 상수를 정의합니다. 매뉴얼에 따르면

The value of the constant; only scalar and null values are allowed. Scalar values are integer, float, string or boolean values. It is possible to define resource constants, however it is not recommended and may cause unpredictable behavior.

그래서 당신은 함수의 값으로 상수를 정의 할 수 없습니다.

당신은`addTab()`를 직접 사용할 수 없습니다
function addTab($inNum) { 
    $out = ""; 
    for ($i = 0; $i < $inNum; $i++) $out .= "*"; 
    return $out; 
} 
$T = 'addTab'; 
$r = $T(5); 
var_dump($r); // string(5) "*****" 
+0

나는 inspector-g의 답변에 방금 글을 썼는데, 이것은 또한 인수를 취하여 반환하는'define()'을 허용하지 않는가? (addTab() 함수를 우회하는) 문자열?** 편집 ** : 바이 패싱은 잘못된 단어 였고,'addTab()'와 같은 효과를 가졌지 만'define()' – asimes

+0

이 가능하다면 매뉴얼에 확실히 설명되어 있습니다. 주석을'define' 함수에 추가). –