>백엔드 개발 >PHP 튜토리얼 >함수형 프로그래밍 살펴보기: WordPress 플러그인 개발을 위한 경로

함수형 프로그래밍 살펴보기: WordPress 플러그인 개발을 위한 경로

WBOY
WBOY원래의
2023-08-30 13:37:081421검색

探索函数式编程:开发 WordPress 插件的途径

이 시리즈의 2부에서는 WordPress 플러그인을 작성할 때 사용할 수 있는 두 가지 프로그래밍 스타일(프로그래밍 패러다임이라고도 함)을 살펴봅니다. 1부에서는 Tom McFarlin이 객체 지향 프로그래밍을 소개합니다. 이번 시간에는 함수형 프로그래밍에 대해 알아보겠습니다.

독자의 경험 수준이 다양하기 때문에 고급 프로그래밍에 대해 논의할 예정이므로 초보자라도 문제가 없을 것입니다. 그러나 숙련된 개발자라면 이 문서의 뒷부분에서 더 유용한 정보를 찾을 수 있습니다.


함수형 프로그래밍이란 무엇인가요?

함수형 프로그래밍은 아마도 여러분에게 가장 친숙한 스타일일 것이며 거의 보편적으로 사용되며 인터넷의 다양한 WordPress 스니펫 사이트에서 사용되는 스타일입니다. 따라서 이는 때때로 "초보 수준" 프로그래밍, 즉 초보자가 객체 지향 프로그래밍을 익히기 전에 채택하는 스타일로 간주될 수 있습니다. 함수형 프로그래밍이 훨씬 간단하기는 하지만 본질적으로 열등한 것은 아니기 때문에 이것은 믿을 수 없을 정도로 오해의 소지가 있습니다.

함수형 프로그래밍은 코드가 객체에 작용하고 메서드를 사용하여 해당 객체를 변경하거나 객체와 상호 작용하는 것으로 생각하도록 장려하는 객체 지향 프로그래밍과 달리 함수 평가를 강조하고 상태나 객체의 개념을 피합니다. 이 두 가지 스타일을 비교하는 매우 간단한 예를 살펴보겠습니다.

으아악

이 매우 간단한 예는 두 패러다임 사이의 스타일의 근본적인 차이점을 보여줍니다. 함수형 프로그래밍은 매개변수를 함수에 전달하고 함수에서 값을 받는 데 중점을 둡니다. 작동되는 "객체"는 없으며 매개변수와 반환 값만 있습니다. 이와 대조적으로 객체 지향 접근 방식은 객체에 다양한 속성(이 경우 "값")을 할당하고 메서드는 이러한 속성에 따라 작동합니다.


기능: 기본

함수를 정의하는 것은 매우 간단합니다:

으아악

함수를 선언한 후에는 플러그인 내 어디에서나 사용할 수 있습니다. 즉, 전역 범위를 갖습니다.

으아악 함수에는 고유한 이름이 있어야 합니다. 함수를 다시 선언하면 오류가 발생합니다. 코드는 다른 플러그인, 테마 및 WordPress 자체와 함께 실행되므로 일반 이름을 사용하면 안 됩니다. 대신, 함수 이름 앞에 고유한 접두사(예: 플러그인 이름)를 추가해야 합니다.

add 的定义中,第二个参数设置为等于 1。这为 $number2(이 경우 1)에 기본값을 설정하면 매개변수가 선택사항이 된다는 점을 눈치채셨을 것입니다. 인수가 제공되지 않으면 값이 기본값으로 처리됩니다.

으아악

반면 첫 번째 값에는 기본값이 제공되지 않으므로 해당 매개변수를 생략하면 오류가 발생합니다

으아악

변수 개수를 지정할 수도 있습니다. 함수 내에서 func_num_args() 来获取收到的参数数量,而 func_get_arg()를 사용하면 0부터 시작하여 색인이 지정된 특정 전달 변수에 액세스할 수 있습니다.

으아악

위 내용은 객체 메소드에서도 사용할 수 있습니다. 마지막으로 변수를 "전역"으로 선언하면 함수 내부에서 해당 변수에 액세스할 수 있습니다.

으아악 전역 변수의 사용은 일반적으로 권장되지 않습니다. 특히 전역 변수에 동일한 이름을 사용하는 두 개의 플러그인으로 인해 플러그인 중 하나 또는 둘 모두가 중단될 수 있습니다. 전역 변수를 사용해야 하는 경우 플러그인 이름을 접두어로 붙여 변수가 고유한지 다시 확인하세요.

함수형 프로그래밍을 사용하는 이유는 무엇인가요?

사용할 프로그래밍 스타일을 결정하는 것은 판단과 개인 취향에 따라 결정됩니다. 객체 지향 프로그래밍 대신 함수형 프로그래밍을 사용하는 것이 더 정확하거나 틀린 것은 아니지만 일반적으로 달성하려는 목표에 더 적합한 스타일이 있습니다.

객체 지향 프로그래밍은 단순히 필요하지 않고 상황을 지나치게 복잡하게 만들거나 중복된 코드를 도입하는 경우도 있습니다. WordPress에서 제공하는 다양한 "유틸리티" 기능을 예로 들 수 있습니다. 특정 목적을 수행하는 데 사용되는 일반적인 기능입니다. 예를 들어 wp_trim_words( $text, $num_words ) 只是将给定的字符串修剪到一定的大小(以单词为单位)。它不会添加任何内容来将 wp_trim_words()는 객체에 속하는 메서드로 정의되어 더 보기 흉한 코드를 생성합니다. 함수형 프로그래밍의 경우 한 줄만 있으면 됩니다.

함수형 프로그래밍의 장점 중 하나는 특히 초보자를 위한 단순성입니다. 정적, 비공개 또는 보호 기능에 대해 걱정할 필요가 없습니다. 모두 전역 기능입니다. 정적 변수의 개념도 존재하지 않습니다. 가장 기본적인 수준에서 함수는 사용자가 제공한 내용에서 파생된 출력을 반환합니다. 예를 들어 get_the_title( 7 )는 ID가 7인 게시물 제목을 반환합니다.

함수형 프로그래밍의 또 다른 장점은 함수에 전역적으로 액세스할 수 있다는 것입니다. 객체 지향 프로그램의 경우 특정 객체에 대해 작업을 수행하려면 해당 객체를 전달해야 합니다. 때로는 까다로울 수 있습니다. 이를 설명하기 위해 1부의 예를 들어보겠습니다.

class DemoPlugin {
	public function __construct() {
		add_action( 'wp_enqueue_scripts', array( $this, 'register_plugin_scripts' ) );
	}

	public function register_plugin_scripts() {
		// Register plugin scripts
	}
}
$demo_plugin = new DemoPlugin();

当 WordPress 存储 register_plugin_scripts() 方法时,以便在触发 wp_enqueue_scripts 操作时调用它,它不仅通过引用该方法,而且还引用对象 $demo_plugin 来实现此目的。这是因为同一对象的不同实例的相同方法被视为不同的方法 - 即 $demo_plugin->register_plugin_scripts()$copy_of_demo_plugin->register_plugin_scripts() 不是相同。这可能看起来很奇怪 - 但对于同一类的不同实例,方法的行为可能不同,因此我们需要引用方法和实例。

但是为什么这很重要呢?这使得第三方插件或主题很难取消该方法,因为为此他们需要调用:

	remove_action( 'wp_enqueue_scripts', array( $demo_plugin, 'register_plugin_scripts' ) );

但通常他们无法访问 $demo_plugin 变量。 (注意:如果该方法被声明为静态,那么您可以解决这个问题)。


WordPress 中的面向对象和函数式编程

当然,面向对象编程有其优点,如第一部分所述。正如 Tom 还提到的,使用 WordPress 的小部件 API 时这是不可避免的。另一个常见的例子是 WP_Query()。在这里,面向对象的方法显然是最好的:您有一个对象(在本例中是一个查询),它具有各种属性(即搜索条件、分页信息、匹配结果),并且您想要对该查询进行操作(解析它,生成并清理相应的SQL,并返回结果)。

WP_Query() 演示了正确使用时面向对象编程的强大功能。发起查询后:

$the_query = new WP_Query( array(...) );

您不仅可以访问结果,还可以访问其他信息,例如分页值:有多少页结果、正在查看哪个页面、结果总数以及查询的“类型”,例如$the_query->is_search()$the_query->is_single() 等。还有整个“循环”基础设施;

	if ( $the_query->have_posts() ) {
		echo '<ul>';
		while( $the_query->have_posts() ): $the_query->the_post();
			// The Loop
			echo '<li>' . get_the_title( $the_post->ID ) . '</li>';
		endwhile;
		echo '</ul>';
	}
	wp_reset_postdata();

它将结果和全局变量的所有内部处理隐藏在人性化的 API 后面。

那么 get_posts() 呢?这只是作为 WP_Query() 的包装器,并简单地返回与查询匹配的帖子数组。因此,您不会得到 WP_Query() 的“花哨”功能,但它的效率稍高一些。因此,是否应该使用 get_posts() 还是 WP_Query() 取决于您的用例(例如,是否需要分页),但这也取决于个人喜好。

	$results = get_posts( array( ... ) );

	if ( $results ) {
		echo '<ul>';
		foreach( $results as $the_post ) {
			echo '<li>' . get_the_title( $the_post->ID ) . '</li>';
		}
		echo '</ul>';
	}

摘要

希望这两篇文章有助于突出这些编程风格的优点和缺点。要点是,这里没有对与错,每个程序员都有自己的个人偏好。但某些上下文更容易适应某种编程风格 - 因此您应该期望您的插件包含两者的混合。

위 내용은 함수형 프로그래밍 살펴보기: WordPress 플러그인 개발을 위한 경로의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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