PHP 아키텍트의 제안을 구하십시오!PHP 아키텍처 및 참조 별 대 패스 값
저는 PHP에 익숙하지는 않지만 언어로 작성된 대규모 분석 패키지의 유지 관리를 담당했습니다. 이 아키텍처는보고 된 데이터를 다양한 키/값 배열로 읽어 들여 다양한 구문 분석 모듈을 통과하여 각 모듈에 알려진 보고서 매개 변수를 추출합니다. 알려진 매개 변수가 마스터 배열에서 제거되고 모듈 중 하나에서 인식되지 않은 모든 나머지는 "알 수없는"데이터 요소를 보여주는 일종의 포괄적 인 보고서로 덤프됩니다.
이러한 파서 모듈을 호출하는 데 사용되는 몇 가지 다른 방법이 있습니다. 어떤 것이 적절한 "PHP"구조로 간주되는지 알고 싶습니다. 일부는 참조에 의한 통과를 사용하고 다른 일부는 값 별 전달, 일부는 함수, 일부는 객체입니다. 그들 모두는 어떤 식 으로든 입력 매개 변수를 수정합니다.
슈퍼 간단한 예는 다음과 같습니다
는#!/usr/bin/php
<?php
$values = Array("a"=>1, "b"=>2, "c"=>3, "d"=>4);
class ParserA {
private $a = null;
public function __construct(&$myvalues) {
$this->a = $myvalues["a"];
unset($myvalues["a"]);
}
public function toString() { return $this->a; }
}
// pass-by-value
function parse_b($myvalues) {
$b = $myvalues["b"];
unset($myvalues["b"]);
return Array($b, $myvalues);
}
// pass-by-reference
function parse_c(&$myvalues) {
echo "c=".$myvalues["c"]."\n";
unset($myvalues["c"]);
}
// Show beginning state
print_r($values);
// will echo "1" and remove "a" from $values
$a = new ParserA($values);
echo "a=".$a->toString()."\n";
print_r($values);
// w ill echo "2" and remove "b" from $values
list($b, $values) = parse_b($values);
echo "b=".$b."\n";
print_r($values);
// will echo "3" and remove "c" from $values
parse_c($values);
print_r($values);
?>
가 출력 될 것입니다 :
Array
(
[a] => 1
[b] => 2
[c] => 3
[d] => 4
)
a=1
Array
(
[b] => 2
[c] => 3
[d] => 4
)
b=2
Array
(
[c] => 3
[d] => 4
)
c=3
Array
(
[d] => 4
)
내가 사용에 너무 많은 다른 호출 방법을 가지고 정말 불편 해요 일부의 숨겨진 효과가 "& 포인터"스타일 함수를 사용하는 호출 함수 매개 변수에서, 일부는 본체에 출력을 쓰고, 일부는 출력을 독립적으로 작성해야합니다.
나는 하나의 방법론을 선택하고 그것을 고집하는 것을 선호합니다. 그렇게하기 위해서 가장 효율적인 방법을 알고 싶습니다. 필자가 PHP 문서를 읽었을 때 copy-on-write를 사용하기 때문에 객체를 직접 전달하고 반환 값을 다시 읽는 것에 비해 포인터를 사용하는 것이 성능 차이가 없어야 함을 나타냅니다. 또한 객체 지향 구조를 사용하는 것을 선호하지만 생성자의 입력 매개 변수에 숨겨진 변경 사항을 적용하는 것이 불편합니다.
세 가지 호출 방법 중 ParserA(), parse_b() 및 parse_c()가 가장 적합한 스타일 인 경우?
그래서 무슨 문제? – cletus