PHP学习 Day 2 REPL 和 包管理

694 查看

最新版

Debian Wheezy下的PHP是5.4的,day0时说图方便就装了5.4。但是看文档是5.5的,所以琢磨着还是用最新版算了。

Debian Wheezy有dotdeb.org提供php-5.5。安装很方便。

将下列内容加入/etc/apt/sources.list:

deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all

添加GPG key:

wget http://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

好了,可以安装了:

sudo apt-get update
sudo apt-get install php5-cli

REPL

day0 我推荐了phpsh,后来 @samoay 推荐了 Boris,用下来比 phpsh 好用,而且 Boris 也是用 PHP 实现的。用一个 Python 实现的 PHP REPL 总是感觉怪怪的。

包管理

试用了 Composer,新一代的 PHP 包管理器,感觉不错。

习题

有一个city.txt文件,内容如下:

代码

    名称

110000

北京市

110100

市辖区

110101

    东城区

110102

    西城区

110103

    崇文区

110104

    宣武区

110105

    朝阳区

110106

    丰台区

(后略)

现在需要将数字全部剔除,生成一个新文件 area.txt,只包括地名。

依然是 @Green_leaves 出的题。

Day 1 习题答案

习题见Day 1

1. 图书优惠活动,计算需要付的金额。

基本的条件语句。短路的运用让代码更简短。

function price($shopping_list) {
  $total = array_sum($shopping_list);
  if ($total > 500) {
    $aftermath = $total - 200;
  }
  elseif ($total > 400) {
    $aftermath = $total - 120;
  }
  elseif ($total > 300) {
    $aftermath = $total -80;
  }
  elseif ($total > 200) {
    $aftermath = $total -50;
  }
  elseif ($total > 100) {
    $aftermath = $total -10;
  }
  else {
    $aftermath = $total;
  }
  return $aftermath;
}

2. 文件读写

PHP函数有Flag,FILE_APPEND表示追加,LOCK_EX锁定文件,避免别的进程同时读写。


# 将we're the sfer!写入sf.txt $to_write_file = "sf.txt"; $to_write_content = "we're the sfer!"; file_put_contents($to_write_file, $to_write_content); # 将www.baidu.com内容追加sf.txt file_put_contents($to_write_file, 'www.baidu.com', FILE_APPEND | LOCK_EX);

3. 匹配图片名称

PHP里的正则使用 preg 系列函数,让我感到诧异的是居然正则表达式要用 / 包起来…… 人家语法层面原生支持正则表达式的语言这么做还有道理,你都用函数了何必如此


# 获取<img alt="SegmentFault" src="http://s.segmentfault.com/img/logo.png?13.10.21.1">里图片名称 $URL = '<img alt="SegmentFault" src="http://s.segmentfault.com/img/logo.png?13.10.21.1">'; function get_image_name($url) { preg_match('/(img\/)([a-z0-9]+\.[a-z]+)/', $url, $image_name); return $image_name[2]; } echo get_image_name($URL);

Day 0 - 5 列表