PHP 클래스에 외부 메소드를 포함할 수 있습니까? 가장 좋은 대안은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-21 06:19:09
원래의
378명이 탐색했습니다.

Can External Methods Be Included in a PHP Class, and What's the Best Alternative?

PHP 클래스에 외부 메소드 포함

코드를 PHP 클래스에 포함할 수 있습니까?

코드를 PHP 클래스에 직접 포함 PHP에서는 클래스 본문이 불가능합니다. 그러나 메서드는 클래스 본문 외부의 외부 파일에서 포함될 수 있습니다.

비즈니스 로직 분리

비즈니스 로직을 다른 클래스 요소와 분리하려는 의도는 이해할 수 있습니다. 그러나 별도 파일의 메소드를 포함시키는 것은 PHP 구문 규칙을 위반합니다.

성능 문제

Myclass.php가 요청당 한 번만 포함되는 경우 외부 파일 Myclass_methods.php 또한 한 번만 포함됩니다. 따라서 성능은 큰 문제가 되지 않아야 합니다.

적절한 솔루션: 전략 패턴

클래스 동작을 동적으로 변경하려면 외부를 포함하는 것보다 전략 패턴이 더 적합한 접근 방식입니다. 파일. 여기에는 정의된 메소드로 인터페이스를 생성하고 다양한 메소드 구현으로 인터페이스를 준수하는 여러 클래스를 구현하는 작업이 포함됩니다.

구현:

// MeowingInterface.php
interface MeowingInterface
{
    public function meow(): string;
}

// RegularMeow.php
class RegularMeow implements MeowingInterface
{
    public function meow(): string
    {
        return 'meow';
    }
}

// LolcatMeow.php
class LolcatMeow implements MeowingInterface
{
    public function meow(): string
    {
        return 'lolz xD';
    }
}

// Cat.php
class Cat
{
    private MeowingInterface $meowingBehaviour;

    public function setMeowingBehaviour(MeowingInterface $meowingBehaviour): void
    {
        $this->meowingBehaviour = $meowingBehaviour;
    }

    public function meow(): string
    {
        return $this->meowingBehaviour->meow();
    }
}
로그인 후 복사

사용법:

// index.php
require_once 'MeowingInterface.php';
require_once 'RegularMeow.php';
require_once 'LolcatMeow.php';
require_once 'Cat.php';

$cat = new Cat();
$cat->setMeowingBehaviour(new RegularMeow());
echo $cat->meow(); // Outputs "meow"

// Change behaviour
$cat->setMeowingBehaviour(new LolcatMeow());
echo $cat->meow(); // Outputs "lolz xD"
로그인 후 복사

전략 패턴을 따르면 외부 파일을 포함하는 것과 같은 비정통적인 관행에 의존하지 않고도 클래스의 동작을 쉽게 변경할 수 있습니다. 이 접근 방식은 장기적으로 코드 유연성과 유지 관리성을 제공합니다.

위 내용은 PHP 클래스에 외부 메소드를 포함할 수 있습니까? 가장 좋은 대안은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿