不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2016-02-18 15:03  分类:PHP基础 

延迟静态绑定

在PHP5.3以后引入了延迟静态绑定。看下面这段代码:

<?php
class A {
	public static function who() {
		echo __CLASS__;
	}

	public static function test() {
		self::who();
	}
}

class B extends A {
	public static function who() {
		echo __CLASS__;
	}
}

B::test();
?>

上面的代码输出了A,但是我希望它输出B,这就是问题的所在。这也是self和__CLASS__的限制。使用self::或者 __CLASS__对当前类的静态引用,取决于定义当前方法所在的类。所以,这就很好的解释了为什么上面的代码输出了A。但是,如果我们需要输出B呢?

作者:php-note.com  发布于:2015-12-15 16:09  分类:PHP基础 

后台往往需要导出各种数据到 Excel文档中。通常我们是导出 .csv文件格式,PHP导出函数参考代码如下:

/**
 * 导出数据到CSV文件
 *
 * @param array $data 二维数组(模拟数据表记录)
 * @param array $titleList 标题数组列表
 * @param string $fileName CSV文件名
 */
function csv_export(&$data, $titleList = array(), $fileName = '')

作者:php-note.com  发布于:2015-12-01 00:12  分类:PHP基础 

一、先看最简单的情况。

有两个数组:

$arr1 = array(1, 9, 5);
$arr2 = array(6, 2, 4);

array_multisort($arr1, $arr2);

print_r($arr1); // 得到的顺序是1,5,9
print_r($arr2); // 得到的顺序是6,4,2

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。

作者:php-note.com  发布于:2015-09-25 12:04  分类:PHP基础 

文件夹文件拷贝/复制函数

/**
 * 文件夹文件拷贝
 *
 * @param string $src 来源文件夹
 * @param string $dst 目的地文件夹
 * @return bool
 */
function dir_copy($src = '', $dst = '') {
	if (empty($src) || empty($dst)) {
		return false;
	}

	$dir = opendir($src);
	dir_mkdir($dst);
	while (false !== ($file = readdir($dir))) {
		if (($file != '.') && ($file != '..')) {
			if (is_dir($src . '/' . $file)) {
				dir_copy($src . '/' . $file, $dst . '/' . $file);
			} else {
				copy($src . '/' . $file, $dst . '/' . $file);
			}
		}
	}
	closedir($dir);

	return true;
}

 

作者:php-note.com  发布于:2015-08-26 15:15  分类:PHP基础 

PHP如何计算短信的长度/字数?

项目中,用到发短信功能,但是每条短信如果字数超过70,会作为一条新的短信发送,所以在记录发送短信日志时,需要计算下文字个数!

英文、中文统一为一个字来计算,上面的 strlen_utf8($str) 正好可以解决这个问题。

作者:php-note.com  发布于:2015-08-07 22:07  分类:PHP基础 
/**
 * PHP计算两个时间段是否有交集(边界重叠不算)
 *
 * @param string $beginTime1 开始时间1
 * @param string $endTime1 结束时间1
 * @param string $beginTime2 开始时间2
 * @param string $endTime2 结束时间2
 * @return bool
 * @author blog.snsgou.com
 */
function is_time_cross($beginTime1 = '', $endTime1 = '', $beginTime2 = '', $endTime2 = '')
{
	$status = $beginTime2 - $beginTime1;
	if ($status > 0)
	{
		$status2 = $beginTime2 - $endTime1;
		if ($status2 >= 0)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		$status2 = $endTime2 - $beginTime1;
		if ($status2 > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}

 

作者:php-note.com  发布于:2015-08-05 22:35  分类:PHP基础 

一年有多个周,每周的开始日期和结束日期

参考代码一:(正在用的版本

<?php
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
$year = (int)$_GET['year'];
$week = (int)$_GET['week'];
$weeks = date("W", mktime(0, 0, 0, 12, 28, $year));

echo $year . '年一共有' . $weeks . '周<br />';

if ($week > $weeks || $week <= 0)
{
	$week = 1;
}

if ($week < 10)
{
	$week = '0' . $week;
}
$timestamp['start'] = strtotime($year . 'W' . $week);
$timestamp['end'] = strtotime('+1 week -1 day', $timestamp['start']);

echo $year . '年第' . $week . '周开始时间戳:' . $timestamp['start'] . '<br />';
echo $year . '年第' . $week . '周结束时间戳:' . $timestamp['end'] . '<br />';
echo $year . '年第' . $week . '周开始日期:' . date("Y-m-d", $timestamp['start']) . '<br />';
echo $year . '年第' . $week . '周结束日期:' . date("Y-m-d", $timestamp['end']);
?>
作者:php-note.com  发布于:2015-08-02 12:09  分类:PHP基础 

什么是 Session

在 web 应用开发中,Session 被称为会话。主要被用于保存某个访问者的数据。

由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的。

既然如此,那么服务端怎么知道是哪个访问者在请求它呢?又如何将不同的数据对应上正确的访问者?答案是,给访问者一个唯一获取 Session 中数据的身份标示。

作者:php-note.com  发布于:2015-07-09 15:53  分类:PHP基础 

当我们使用传统的 mysql_connect 、mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制。虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷。而使用PHP的PDO扩展的 prepare 方法,就可以避免 sql injection 风险。

作者:php-note.com  发布于:2015-07-08 22:04  分类:PHP基础 

PDO 提供了三种不同的错误处理模式,以满足不同风格的应用开发:

PDO::ERRMODE_SILENT

此为默认模式。 PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象。如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 PDOStatement::errorCode() 或PDOStatement::errorInfo() 方法。如果错误是由于调用数据库对象而产生的,那么可以在数据库对象上调用上述两个方法。