>  기사  >  백엔드 개발  >  글로벌 문제 및 PHP에 포함

글로벌 문제 및 PHP에 포함

WBOY
WBOY원래의
2016-08-04 09:22:041068검색

저는 초보자입니다. 공부 중에 이해가 안 되는 부분도 있고 검색도 쉽지 않아서 여러분들께 물어보려고 여기에 보냈습니다.
모든 답변과 도움에 미리 감사드립니다.

제목 그대로

<code>目前有 a.php b.php c.php 三个文件
</code>

a.php 의사 코드는 다음과 같습니다.

<code><?php
function say($key,$val){
    global $array;
    $array[$key]=$val;
    extract($array);
}
function write($name){
    include_once($name.".php");
}

$action = $_GET['a'];//假设当前 url: a.php?a=b
include_once($action.".php");
$action();</code>

b.php 코드는 다음과 같습니다

<code><?php
function b(){
    say("str","thinks");
    write("c");
}</code>

c.php

<code><?php
var_dump($str);</code>

달성해야 할 목표는 C.PHP 파일에서 변수 값을 직접 읽을 수 있다는 것입니다.


일반적인 로직은 위와 같습니다. 그리고 개인적으로는 이 부분이 프레임워크의 할당/표시와 유사하다고 생각하는데, 어떻게 구현해야 할지 모르겠습니다.

위 코드는 오류를 보고합니다: Notice: Undefined variable: str

저에게 조언(또는 글쓰기 습관 등)을 주실 수 있으면 좋겠습니다.
감사합니다.

답글 내용:

저는 초보자입니다. 공부 중에 이해가 안 되는 부분도 있고 검색도 쉽지 않아서 여러분들께 물어보려고 여기에 보냈습니다.
모든 답변과 도움에 미리 감사드립니다.

제목 그대로

<code>目前有 a.php b.php c.php 三个文件
</code>

a.php 의사 코드는 다음과 같습니다.

<code><?php
function say($key,$val){
    global $array;
    $array[$key]=$val;
    extract($array);
}
function write($name){
    include_once($name.".php");
}

$action = $_GET['a'];//假设当前 url: a.php?a=b
include_once($action.".php");
$action();</code>

b.php 코드는 다음과 같습니다

<code><?php
function b(){
    say("str","thinks");
    write("c");
}</code>

c.php

<code><?php
var_dump($str);</code>

달성해야 할 목표는 C.PHP 파일에서 변수 값을 직접 읽을 수 있다는 것입니다.


일반적인 로직은 위와 같습니다. 그리고 개인적으로는 이 부분이 프레임워크의 할당/표시와 유사하다고 생각하는데, 어떻게 구현해야 할지 모르겠습니다.

위 코드는 오류를 보고합니다: Notice: Undefined variable: str

저에게 조언(또는 글쓰기 습관 등)을 주실 수 있으면 좋겠습니다.
감사합니다.

global $array; 은 $array의 범위만 수정하지만 extract($array);은 함수 내에서 실행되므로 $str의 범위는 여전히 함수 내에 있습니다.

'개인적으로는 이 부분이 프레임워크에 할당/표시하는 것과 비슷하다고 생각합니다'와 '하지만 구현 방법을 모르겠습니다'라고 말씀하신 두 문장은 모르신다면 모순입니다. 어떻게 구현하면 이 부분이 프레임워크의 할당/표시와 유사하다고 생각하는 이유는 무엇입니까?

클래스를 사용하여 작성하면 예제는 동일합니다. 세 개의 파일을 별도로 정의할 필요가 없으며 사용하는 기능은 객체 지향 방식으로 잘 생각하지 못한다는 것을 보여줍니다. , 그리고 당신의 걸음은 안정적이지 않습니다. 우리가 당신에게 스프린트 기술에 대해 말하는 것은 확실히 의미가 없습니다.

PHP의 모든 변수에는 범위가 있습니다. 프레임워크에서 assign/display 및 기타 양식을 사용하여 볼 수 있는 템플릿 엔진은 모두 extract 출력 변수와 include 가져오기 템플릿 파일을 동일한 파일에 넣습니다. 함수를 사용하는 경우에만 변수 범위가 일관될 수 있으며 가져온 파일에서 변수 값을 얻을 수 있습니다. 작성 방법에 관해서는 두 작업을 서로 다른 기능으로 분할하면 물론 서로 액세스할 수 없습니다. c.php에서 변수 값을 얻고 싶다고 말하지 마세요. say("str","thinks"); 바로 다음에 변수 값을 얻을 수는 없습니다.

당신은 함수의 전역 및 내부 변수 범위 문제를 제대로 이해하지 못한 것 같습니다. 개념이나 사용법을 다시 한번 확인해 보시는 걸 추천드려요!
귀하의 생각에 따르면 var_dump($str);의 $str은 extract($array);의 매개변수 'str'입니다. 실제로 이때 var_dump가 얻으려는 것은 기능을 말해요.
당신이 하는 일은 다음과 같습니다.

<code>function a(){
    $str = '123';
}
a();
var_dump($str);</code>

$str을(를) 얻을 수 없습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.