global $a, $b, $c...
과 같이 모든 함수의 변수를 모두 입력하지 않고 전역 변수로 만들 수 있습니까?모든 함수의 변수는 전역 변수입니다
답변
희망은 도움 등
완벽한 예 방법 기능으로 작동합니다. 물론, 당신이 이것을 필요로한다면, 당신은 그것을 잘못했을 가능성이 큽니다.
아니요. 어쨌든 그렇게하는 것이 끔찍한 일입니다.
왜 끔찍한가요? 그것을 증명할 수 있습니까? 내 기능 하나면 이걸 필요해. –
나머지 디자인은 짜증이 나기 때문에 필요합니다. 전역 변수 공간을 오염시키는 대신 개체에 필요한 모든 데이터를 캡슐화하는 방법은 무엇입니까? –
Matti와 관련하여 위의 게시물과 같은 방법을 언급하고 있습니까? – RobertPitt
당신은 인수로 전달할 수 있으며, 다음은 global
키워드를 필요로하지 않습니다
function(&$a, &$b, &$c)
{
// your code........
}
과 같이, 응용 프로그램 내에서 정적 객체를 생성하고 해당 범위에 변수를 할당하는보십시오!
<?php
/*
* Core class thats used to store objects of ease of access within difficult scopes
*/
class Registry
{
/*
* @var array Holds all the main objects in an array a greater scope access
* @access private
*/
private static $objects = array();
/**
* Add's an object into the the global
* @param string $name
* @param string $object
* @return bool
*/
public static function add($name,$object)
{
self::$objects[$name] = $object;
return true;
}
/*
* Get's an object out of the registry
* @param string $name
* @return object on success, false on failure
*/
public static function get($name)
{ if(isset(self::$objects[$name]))
{
return self::$objects[$name];
}
return false;
}
/**
* Removes an object out of Registry (Hardly used)
* @param string $name
* @return bool
*/
static function remove($name)
{
unset(self::$objects[$name]);
return true;
}
/**
* Checks if an object is stored within the registry
* @param string $name
* @return bool
*/
static function is_set($name)
{
return isset(self::$objects[$name]);
}
}
?>
이 파일이 포함 된 첫 번째 파일 중 하나라는 점을 고려하면 개체/배열/변수/리소스/등을이 범위에 설정할 수 있습니다.
그래서 이것은 당신이 아니 다른 곳에서는 스크립트 내에서
...
$database = new PDO($dns);
Registry::add('Database',$database);
$DBConfig = Registry::get('Database')->query('SELECT * FROM config_table')->fetchAll(PDO::FETCH_CLASS);
Registry::add('Config',$DBConfig);
추가하거나 항목을 검색 할 수 있습니다 사용 HWO, 당신은 단지 DB 연결을 만들었습니다 말할 수 있습니다.
Registry::get('ITEM_NEEDED');
으로이
function insertItem($keys,$values)
{
Registry::get('Database')->query('INSERT INTO items ('.implode(',',$keys).') VALUES ('.implode(',',$values).')');
}
당신은 항상 $GLOBALS["var"]
대신 $var
사용할 수 있습니다
나는 무례하다는 것을 의미하지는 않는다. 그러나 이것은 타이핑이 더 많이 걸리는 것을 제외하고는 전역 적 사용의 거의 모든 문제를 가지고있다. (이것은 OP의 주된 문제인 것 같다.) –
이것은 내가하는 일을 선호하는 방법입니다. 더 좋은 해결책이 있다면 언제든지 자유롭게 게시하십시오. – RobertPitt
괜찮습니다. 귀하의 답변은 완벽하게 유효합니다. 나는 방금 전 세계 국가에 의존하여 데이터를 전달하는 것이 문제가 될 수 있다는 것을 의미했습니다. 오히려 매개 변수와 반환 값을 사용하고 싶습니다. –
- 1. 루비의 전역 변수는 전역 적으로 어떻게됩니까?
- 2. 파이썬 함수의 문자열 변수는 무엇입니까?
- 3. 파이썬 전역 변수는 스레드로부터 안전합니까?
- 4. 웹 페이지에서 전역 JavaScript 변수는 어디에서 선언해야합니까?
- 5. PHP 전역 변수는 함수에서 찾을 수 없습니다
- 6. ASP.NET C# 정적 변수는 전역 변수입니까?
- 7. DLL의 전역 변수는 메모리에 어디에 저장되어 있습니까?
- 8. 코드 이그니 터에서 전역 변수는 어디에 선언해야합니까?
- 9. 목표 C - 전역 정적 변수는 어디에서 dealloc합니까?
- 10. DLL에서 선언 된 전역 변수는 어떻게됩니까?
- 11. 전역 변수는 실행 파일의 크기에 어떻게 기여합니까?
- 12. PHP 모든 함수 변수 전역
- 13. 초기화하지 않은 전역 변수는 초기화 후 어디로 이동합니까?
- 14. dlclose가 호출 될 때 공유 라이브러리의 전역 변수는 어떻게됩니까?
- 15. JavaScript의 변수는 얼마나 비쌉니까?
- 16. 모든 단일 매개 변수는 인터페이스를 사용해야합니까?
- 17. 모든 인스턴스가 공유하는 방법 본문의 정적 변수는
- 18. 함수의 컨텍스트에서 전역 변수의 값을 설정하면 UnboundLocalError가 발생합니까?
- 19. 재귀 함수의 전역 변수를 0으로 유지하는 방법은 무엇입니까?
- 20. 전역 Function.prototype을 수정하지 않고 함수의 상속 된 속성을 만들려면 어떻게해야합니까?
- 21. 내 보낸 dll 함수의 dll에서 전역 데이터에 액세스
- 22. 모든 컨트롤러에서 init 함수의 코드를 중앙화하려면 어떻게합니까?
- 23. 친구 함수의 라인에있는 모든 것이 java에 있습니까?
- 24. PHP 함수의 짹짹에서 모든 해시 태그 검색
- 25. ReportingServices 2008 웹 서비스가 "보고서"매개 변수는
- 26. 자바 스크립트 최적화 ... 전역 변수
- 27. 모든 Silverlight보기에서 전역 일반 목록에 액세스해야합니다.
- 28. PHP - 클래스의 모든 함수에서 전역 변수에 액세스하기
- 29. 전역 규칙은 현재의 모든 규칙에 적용 할
- 30. 모든 터치 감지를 전역 적으로 중지 하시겠습니까?
아야. 이는 안티 패턴이며, 변수를 함수/클래스에 명시 적으로 전달하는 것을 고려하십시오. – nuqqsa
왜 그리고 어떤 시나리오에서 좀 더 자세한 정보를 제공 할 수 있습니까? 필자는 내 머리 속에서 글로벌 기능을 필요로하는 하나의 중심 기능을 왜 가지고 있는지 이해하려고 노력하고 있습니다. – allnightgrocery
@Inkspeak : 다른 방법으로 http://thedailywtf.com/의 코드를 작성할 수 있습니까? –