返回首页 PHP 之道

Coding Practices

基础知识

PHP是一个伟大的语言,可以让各个层次的程序员都能够快速高效地完成编码任务。虽然如此,我们还是经常会因为临时救急或者 坏习惯而忽视了PHP的基础。为了解决这个问题,这部分专门给开发者回顾一下PHP的基础编码实践。

日期和时间

PHP使用DateTime类完成读取、设置、比较和计算日期与时间。虽然PHP中有很多日期和时间处理相关的函数,但是DateTime类提供了 完善的面向对象接口完成各项常见操作,而且还能处理时区,这里不作深入介绍。

要使用DateTime,可以用工厂方法createFromFormat()把原始的日期时间字符串转换为DateTime对象,或直接用new DateTime 获得当前日期和时间的DateTime对象。用format()方法可以把DateTime对象转换成字符串输出。

<?php
$raw = '22. 11. 1968';
$start = \DateTime::createFromFormat('d. m. Y', $raw);

echo "Start date: " . $start->format('m/d/Y') . "\n";

DateTime计算时间时通常需要DateInterval类,如add()sub()方法,都是将DateInterval作为参数。尽量避免直接用 时间戳表示时间,夏令时和时区会让时间戳产生歧义,使用间隔日期更为妥当。计算两个日期的差值使用diff()方法,返回 DateInterval对象,输出显示也很方便。

    <?php
// create a copy of $start and add one month and 6 days
$end = clone $start;
$end->add(new \DateInterval('P1M6D'));

$diff = $end->diff($start);
echo "Difference: " . $diff->format('%m month, %d days (total: %a days)') . "\n";
// Difference: 1 month, 6 days (total: 37 days)

DateTime对象之间可以直接比较:

<?php
if($start < $end) {
    echo "Start is before end!\n";
}

最后一个例子是DatePeriod类的用法,它用于循环事项(recurring events)的迭代。它的构造函数参数为:start和end,均为 DateTime对象,以及返回事项的间隔周期。

<?php
// output all thursdays between $start and $end
$periodInterval = \DateInterval::createFromDateString('first thursday');
$periodIterator = new \DatePeriod($start, $periodInterval, $end, \DatePeriod::EXCLUDE_START_DATE);
foreach($periodIterator as $date)
{
    // output each date in the period
    echo $date->format('m/d/Y') . " ";
}

了解更多DateTime 学习更多日期格式化知识 (accepted date format string options)

设计模式

在代码和项目中使用常见模式是有好处的,可以让代码更易于管理,同时也便于其他开发者理解你的项目。

如果你的项目使用了框架,那么在代码和项目结构上,都会遵循框架的约束,自然也就继承了框架中的各种模式, 这时你所需要考虑的是让上层代码也能够遵循最合适的模式。反之,如果没有使用框架,那么就需要你自己选择 适用于当前项目类型和规模的最佳模式了。

了解更多设计模式

上一篇: 依赖管理 下一篇: 数据库