WORDPRESS开发人员的PHP基础知识

无论您在学习PHP作为WordPress开发人员的过程中的哪个阶段,确保您了解基础知识非常重要。在本文中,我将讨论PHP基础知识:变量,常量,数据类型,函数和范围。

这些知识将使您学习PHP和其他语言,因为大多数这些概念是软件开发的基础。

变量和常量

最简单的“hello world”PHP程序如下所示:

1
echo 'Hi Roy';

这打印出“Hi Roy”字样。但随着程序的增长,我们可能不止一次打印这些单词,或者使用条件逻辑来决定何时或何地打印它们。

虽然原则上我们可以将这些代码行剪切并粘贴到多个位置,但它直接违反了“不要重复自己”(DRY)原则,这是软件开发中最神圣的原则之一。为了避免这种情况,在扩展程序之前将单词“Hi Roy”存储到变量中,如下所示:

1
2
3
$hi = "Hi Roy";

echo $hi;

现在我们可以重用此变量来更改其值:

1
2
3
4
5
6
7
$hi = 'Hi Roy';

echo $hi;

$hi = 'Hi Shawn';

echo $hi;

在软件开发中,变量是根据传递给程序的条件或信息而变化的值。当您创建变量并将数据放入其中时,该数据现在作为RAM中的唯一值存在于服务器上的某个位置。

与变量一样,常量是可以存储内容的另一个项目。顾名思义,与变量相反 – 变量的值在请求期间可能会有所不同 – 常量的内容不能。

例如,这是我们在wp-config.php中定义的常量:

1
define( 'WP_DEBUG', true );

如果我试图在我的网站上的任何其他地方定义WP_DEBUG,我会得到一个错误,因为常量永远不会改变。这就是为什么我们倾向于使用它们而不是变量,主要是在程序配置中。

数据类型

在上一节中,我使用了两种不同类型的数据来设置常量和字符串的值。我使用字符串作为变量,使用布尔值表示常量。字符串包含字母,数字和其他字符以及布尔值的组合,可以是真或假,是PHP的八种不同数据类型中的两种。

值得注意的是,PHP是一种“动态类型语言”,这意味着变量可以改变其类型。在许多其他语言中并非如此。这样做的好处是我们有更多的灵活性,但我们还必须确保变量是我们在使用它之前所期望的类型。

PHP也很灵活。例如,PHP并不关心包含数字的字符串和整数的变量(即数字 – 数据类型)之间的区别。例如,这将完全正常:

1
2
3
4
5
$one = 1;

$three = '3';

$four = $one + $three;

我们有四种简单的数据类型:字符串,整数,布尔值和浮点数。浮点数与整数的不同之处在于它们可以具有十进制值,其中整数必须是整数。这些简单数据类型只包含一个值。但是,有两种“复合”数据类型 – 数组和对象 – 可以包含多个值,这些值可以是任何数据类型。

我们使用函数array()或括号表示法创建数组。后一个选项在PHP 5.4中添加。我更喜欢括号表示法,但必须注意向后兼容性问题,因为大多数WordPress站点都运行过时的PHP版本。

数组是多个数据的结构化表示,可以这样写:

1
2
3
4
5
$post_titles = [
'10 Things You Always Wanted To Know About Coffee',
'8 Worthless Facts About Coffee',
'5 Things That Would Matter Except You Need More Coffee'
];

这是一个简单的一维数组,这意味着它只有一个深度级别。通过在其中嵌套其他数组,数组可以获得深度,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$posts = [
'drinks' => [
'coffee' =>; [
'10 Things You Always Wanted To Know About Coffee',
'8 Worthless Facts About Coffee',
'5 Things That Would Matter Except You Need More Coffee'
],
'tea' => [
'Tea and Other Alternative Caffeine Delivery Systems?',
'Decaf Tea: As Opposed To Coffee, This Is A Good Thing',
]
],
'foods' => [
'9 Tasty Vegan BBQ Solutions',
'5 Sandwiches of Epic Victory'

]
];

我们称之为多维数组,因为它具有嵌套结构。

有些数组也有“键”。我们可以像这样访问食物“钥匙”:

1
$food = $post_titles[ 'food' ];

必须使用该层次结构访问嵌套的键,例如嵌套在饮料下的咖啡键。例如,这会生成警告:

1
$coffee = $post_titles[ 'coffee' ];

但是,这可行:

1
$coffee = $post_titles[ 'drinks' ][ 'coffee' ];

请注意,如果我们不指定键,那么PHP使用数字对数组进行索引,从零开始。因此,要获得咖啡阵列中的第二个条目,我们将使用这样的第一个:

1
$title = $post_titles[ 'drinks' ][ 'coffee' ][1];

数组是可变的。这意味着我们可以随时更改其内容。例如,我们可以像这样在数组中添加另一个项:

1
$post_titles[] = '8 Fun Facts About Juice';

数组中的条目将被推到最后并以数字方式索引,这对我们的结构没有多大意义。最好定义果汁的关键并将其放在那里:

1
$post_titles[ 'juice' ][] = '8 Fun Facts About Juice';

功能和范围

正如我之前提到的,变量的部分原因是避免编写违反DRY原则的重复代码。变量是信息的容器,而函数是功能的容器。如果我们需要做某事,我们几乎总是希望将该功能封装在一个函数中。

我现在要讨论功能和范围。这是必要的,因为函数将代码与程序的其余部分分开。

这样做不仅可以保持干燥,还可以在整个程序中使用该功能,并允许我们根据需要多次运行它。

PHP中的函数是使用“function”关键字创建的,后跟函数和括号的名称,可能包含函数参数。函数参数是我们如何将信息传递给函数。

在函数内部,只有作为参数传入的变量。无法访问在该函数之外定义的变量。它们被认为超出了“范围”。

让我们考虑一下这个名为slug_get_product的函数:

1
2
3
function slug_get_product( $slug ){
return get_post( [ 'post_type' => 'my-product', 'post_name' => $slug ] );
}

这个函数基本上是WordPress函数get_post()的包装器。它会在帖子类型“my-product”中找到一个特定slug的帖子。拥有一个实用程序函数可以节省多次为get_posts()写入相同的参数集。这也意味着如果您更改该帖子类型的名称,则只需更改一行代码。

请注意,我们将变量$ slug作为参数传入。这就是为什么我们可以在函数内使用$ slug。另一方面,这不起作用:

1
2
3
4
$slug = 'red-shoes';
function slug_get_product( ){
return get_post( [ 'post_type' => 'my-product', 'post_name' => $slug ] );
}

这不起作用的原因是在函数内部我们试图使用一个名为slug的变量,但在该范围内不存在这样的变量。即使存在同名的其中一个,它也在不同的范围内,因此无法访问。

实际上,我们可以使用两个名为$ slug的变量来编写这样的代码,但是因为一个在函数内部,而另一个不是,它们是两个完全不同的变量,具有完全不同的值:

1
2
3
4
5
$slug = 'red-shoes';
function slug_get_product( ){
$slug = 'blue-shoes';
return get_post( [ 'post_type' => 'my-product', 'post_name' => $slug ] );
}

这可能看起来很复杂,因为它们看起来是相同的变量,因为它们都具有相同的名称。这是巧合。它们处于不同的范围,因此完全不同。尽管名称相同,但它们代表了服务器RAM中不同的晶体管配置。

顺便说一下,请注意我是如何在函数名称中添加前缀“slug”的?那是因为程序中只能有一个具有相同名称的功能。添加同名的第二个函数会产生致命错误。

这就是为什么你应该总是在你的函数前面添加一个在你的插件或主题中一致的唯一前缀。当你看到这样的文章使用像“slug”这样的前缀时,这意味着你应该将“slug”改为你自己的前缀。

到目前为止,范围仅限于函数内部和外部。我们也有所谓的全球范围。顾名思义,全球范围随处可见。常量属于全局范围,可以在任何地方访问。

变量可以放在全局范围内,也可以从global关键字访问。应尽可能避免全球范围。WordPress使用了很多全局变量。这主要是因为它最初是用PHP 4编写的,没有其他方法可以解决全局变量解决的问题。

WordPress对全局变量的使用虽然并不精彩,但最终并没有那么糟糕,因为它是插件和主题的核心应用程序。大多数情况下,插件和主题不应将变量添加到全局范围。

不过,作为一名WordPress开发人员,您需要了解全局范围。在WordPress循环内部,当前帖子存储在名为post的全局变量中。因此,如果你有一个在循环内运行的函数,要访问当前帖子,你会这样做:

1
global $post;

通常,最好使用get_post()或get_the_ID()等函数来为您执行此操作。您越是避免访问全局变量或将它们视为在函数之间共享数据的方式,而不是将这些数据作为参数传递,就越好。

是吗?

对于WordPress开发的PHP基础知识来说,这是一个很好的开端,但是你仍然需要学习很多东西。我希望通过阅读本文,您可以更好地阅读编码教程并使用您在线找到的代码。更重要的是,您应该能够理解您更好阅读的代码中的决策以及如何使用它。

说点什么

500