클래스 사용 시기 vs.PHP에서의 기능
아직 전구가 안 켜져 있어요
저는 단순히 함수를 사용하는 것보다 php로 클래스를 사용하는 것의 장점에 대해 쉽게 이해할 수 있는 설명을 정말 원합니다.
제가 지금 생각하고 있는 간단한 예는 다음과 같습니다. 수업이 더 효율적인지 궁금해하고 있습니다.
내가 php로 만든 미니 캘린더 위젯이 있다고 치자.그 기능을 호출할까 생각 중입니다.miniCal('arrayVars1', 'var2')
그에서 두 이나 할 . 하지만 그 페이지에서 두 번 할 수도 있습니다.여기서 클래스를 사용하여 리소스를 적게 사용하고 새로운 인스턴스를 생성합니까?
내가 무슨 나무에서 짖어야 할까요? 지금 그 나무는 벽돌담처럼 느껴지기 때문입니다.
클래스는 데이터를 개체로 표현하는 데 사용됩니다.사용자의 데이터나 경매 입찰과 같은 것을 표현하는 경우 사용자 개체 또는 AuctionBid 개체를 만들면 해당 데이터를 더 쉽게 함께 보관하고 코드에 전달하며 독자가 쉽게 이해할 수 있습니다.이러한 클래스에는 특성(숫자, 문자열 또는 기타 개체와 같은 데이터 필드)과 메서드(모든 클래스에서 작동할 수 있는 함수)가 있습니다.
수업은 보통 성과 측면에서 어떤 이점도 제공하지 않지만, 부정적인 영향도 거의 주지 않습니다.그들의 진짜 이점은 코드를 더 명확하게 만드는 것입니다.
PHP5 Object-Oriented Programming 가이드와 Wikipedia OOP 항목을 읽는 것을 추천합니다.
PHP5 이후 공통적으로 수행한 작업은 라이브러리 역할을 하는 클래스를 만드는 것이었습니다.이를 통해 기능을 구성하고 __autoload()와 같은 클래스 기능을 활용할 수 있는 이점을 얻을 수 있습니다.
예를 들어, 데이터를 암호화하고 해독하기 위한 두 가지 함수가 있다고 가정해 보겠습니다.클래스에 래핑하고 정적 함수로 만들 수 있습니다(암호화라고 함).그런 다음 이와 같은 기능을 사용할 수 있습니다(초기화가 필요 없는 경우에는 $obj = new Encryption).
$encrypted_text = Encryption::encrypt($string);
그리고.
$decrypted_text = Encryption::decrypt($string);
이점은 다음과 같습니다.
- 암호화 기능이 함께 그룹화되고 구성됩니다.사용자와 코드를 유지하는 모든 사용자는 암호화 기능을 어디에서 찾을 수 있는지 알고 있습니다.
- 이것은 매우 분명하고 읽기 쉽습니다.유지관리에 좋습니다.
- __autoload()를 사용하여 클래스를 자동으로 포함할 수 있습니다.즉, 내장된 기능처럼 사용할 수 있습니다.
- 자체 클래스와 자체 파일에 포함되어 있기 때문에 재사용이 가능하고 새 프로젝트로 쉽게 포팅할 수 있습니다.
클래스를 사용하는 것은 함수를 그룹화하는 데 좋은 방법입니다.문제는 어떤 기능들이 함께 속해야 하느냐는 것입니다.여러분은 아마 '낮은 결합, 높은 응집력'이라는 말을 들어보셨을 겁니다.이 답변에서는 '고응집력'에 초점을 맞춰 보겠습니다.
몇 가지 함수를 사용하여 서로 관련된 계산을 수행한다고 가정해 보겠습니다.다음과 같은 경우:
function plus1($a){
return $a + 1;
}
function plus2($a, $b){
return $a + $b;
}
function plus3($a, $b, $c){
return $a + $b + $c;
}
function plus4($a, $b, $c, $d){
return $a + $b + $c + $d;
}
서로 관련이 있는 함수들을 그룹화하는 것이 타당할 것입니다.
class PlusCalculator {
public function plus1($a){
return $a + 1;
}
public function plus2($a, $b){
return $a + $b;
}
public function plus3($a, $b, $c){
return $a + $b + $c;
}
public function plus4($a, $b, $c, $d){
return $a + $b + $c + $d;
}
}
그렇다면 언제 기능 대신 수업을 사용해야 할까요?그 답은 프로그래밍 패러다임과 스타일의 사용에 있습니다.O.O.P.에서는 수업이 필요하지만 절차 패러다임에서는 덜 필요합니다.순기능 프로그래밍 언어에서는 수업이 없습니다.
하지만 O.O.P. 언어에서는 그룹 함수가 일관성이 있을 때 클래스에 그룹 함수라고 말하고 싶습니다.
기능은 응용 프로그램의 핵심이고 클래스는 접시에 가깝습니다.접시 없이 고기를 먹으면 지저분합니다.하지만 고기가 없으면 식사가 없습니다.
응용프로그램에 500개의 기능이 있는 경우, 접근을 쉽게 하기 위해 그 중 절반 이상을 더 큰 컬렉션으로 그룹화할 수 있습니다.일반적인 명명 규칙("Encryption_Encrypt", "Encryption_Decrypt" 등)을 고안할 수 있습니다.하지만 수업은 더 쉽습니다.응용 프로그램에 12개의 기능만 있다면 1개 또는 클래스가 있다면 아마도 생존할 수 있을 것입니다.
수업 시간에 데이터/속성을 저장할 필요가 별로 없습니다.저는 그것들을 데이터베이스에 저장하는 편입니다.그래서 저는 수업의 그런 면을 자주 활용하지 않았습니다.
수업은 또한 다형성을 허용해서 도움이 될 수 있습니다.매우 유사한 클래스가 여러 개 있거나 클래스에 여러 가지 변형이 있는 경우 코드를 저장할 수 있습니다.프랑켄슈타인 같은 다목적 교실을 만들 필요도 없이 말입니다
다음 질문에 대한 답변으로 OOP 스타일 클래스를 사용할 수 있는 장소 목록이 있습니다. https://stackoverflow.com/questions/2035449/why-is-oop-hard-for-me/2035482#2035482
기본적으로, 당신이 그 안에 있는 것들을 표현하고 싶을 때마다.고유한 연결이 있는 데이터베이스 변수처럼.그래서 저는 그것을 보관할 것입니다. 그래서 저는 그것을 보관할 것입니다.mysql_query
는 항상 올바른 연결을 사용합니다.
class MySQL extends Database
{
public function connect($host, $user, $pass, $database)
{
$this->connection = mysql_connect($host, $user, $pass);
$this->select_db($database);
}
public function query($query)
{
return mysql_query($query, $this->connection);
}
public function select_db($database)
{
mysql_select_db($database);
}
}
또는 양식을 작성하고 싶을 수도 있습니다. 입력 목록이 포함된 양식 개체를 만들어 표시하기로 결정할 때 양식 안에 있을 수 있습니다.
class Form
{
protected $inputs = array();
public function makeInput($type, $name)
{
echo '<input type="'.$type.'" name="'.$name.'">';
}
public function addInput($type, $name)
{
$this->inputs[] = array("type" => $type,
"name" => $name);
}
public function run()
{
foreach($this->inputs as $array)
{
$this->makeInput($array['type'], $array['name'];
}
}
}
$form = new form();
$this->addInput("text", "username");
$this->addInput("text", "password");
또는 다른 사람이 제안한 것처럼, 사람은:
class Person{
public $name;
public $job_title;
// ... etc....
}
이름이나 직함과 같은 속성을 가진 클래스를 나타내며 양식을 표시하는 등의 방법이 있을 수 있으므로 모두 클래스를 만드는 이유입니다.
기본적으로 둘 다 동일한 작업을 수행하지만 클래스를 사용하면 코드를 보다 쉽게 관리할 수 있습니다. 클래스를 사용하면 클래스에 정의된 함수를 호출하기 위한 개체를 만들어야 하는 반면 직접 함수를 생성하면 개체를 생성할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/2122123/when-to-use-a-class-vs-function-in-php
'it-source' 카테고리의 다른 글
C 프로그래머들이 C++를 쓰기 시작한 나쁜 습관은 무엇입니까? (0) | 2023.09.18 |
---|---|
테마 및 플러그인 설치를 시도하는 바인딩 마운트 볼륨에 대한 도커/워드프레스/디코딩 권한 (0) | 2023.09.18 |
사용자 지정 작업 창은 어떻게 UI의 반응성을 유지하면서 가시성을 전환할 수 있습니까? (0) | 2023.09.18 |
Typecript에 "Class" 타입이 있습니까?"아무것도"가 포함되어 있나요? (0) | 2023.09.18 |
다른 컨테이너에서 도커 컨테이너 액세스 (0) | 2023.09.18 |