文档章节

PHP基础知识

猩红之月
 猩红之月
发布于 2017/03/20 12:03
字数 1385
阅读 10
收藏 0
PHP

 PHP使用<?php ... ?>内嵌于html中, 使用echo输出html语句. 例如:

<?php
  echo '<p>Order processed.</p>';
?>

    通常, 在form表单中获取的变量值存储在$_POST, $_GET, $_REQUEST. 其中submit为GET存储在$_GET中, 为POST存储在$_POST中, 默认都存储在$_REQUEST中.

    而PHP中变量以"$"开头.

一个实际例子:

orderform.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <form class="" action="info.php" method="post">
      <table border="0">
        <tr bgcolor="#cccccc">
          <td width="150">Item</td>
          <td width="50">Quantity</td>
        </tr>
        <tr>
          <td>Tires</td>
          <td align="center"><input type="text" name="tireqty" size="3" maxlength="3" /></td>
        </tr>
        <tr>
          <td>Oil</td>
          <td align="center"><input type="text" name="oilqty" size="3" maxlength="3" /></td>
        </tr>
        <tr>
          <td>Spark Plugs</td>
          <td align="center"><input type="text" name="sparkqty" size="3" maxlength="3" /></td>
        </tr>
        <tr>
          <td colspan="2" align="center"><input type="submit" value="Submit Order" /></td>
        </tr>
      </table>
    </form>
  </body>
</html>

info.php:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <?php 
      $tireqty = $_POST['tireqty'];
      $oilqty = $_POST['oilqty'];
      $sparkqty = $_POST['sparkqty'];

      echo '<p>Your order is as follows: </p>';
      echo $tireqty.' tires<br />';
      echo $oilqty.' bottles of oil<br />';
      echo $sparkqty.' spark plugs<br />';
    ?>
  </body>
</html>

这里, 变量和字符串使用点号(".")进行连接. 而如果在双引号中, 则变量会被解释, 例如:

echo $tireqty.' tires<br />';

等价于:

echo "$tireqty tires<br />";

但单引号中一切都认为是字符串.

    使用define语法定义常量:

define('PI', 3.1415926);

理解PHP变量:

$GLOBALS: 全局变量数组.

$_SERVER: 服务端变量数组.

$_GET: 使用GET方法传递过来的变量.

$_POST: 使用POST方法传递过来的变量.

$_COOKIE: 所存储的cookie变量数组.

$_ENV: 环境变量数组.

$_REQUEST: $_GET/$_POST/$_COOKIE的集合.

$_SESSION: session变量的数组.

在变量引用方面, PHP使用"&"来解决:

$a = 5;
$b = $a;
$a = 7; // $b依旧等于5

而如果使用了"&":

$a = 5;
$b = &$a;
$a = 7; // 则$b也等于7

使用unset来解除变量所关联的引用:

unset($a);

在``字符内可填写: 可执行的操作:

$out = `ls -la`;
echo '<pre>'.$out.'</pre>';

而instanceof用于判断一个对象是否是一个特定类的实例:

class sampleClass{};
$myObject = new sampleClass();
if ($myObject instanceof sampleClass)
  echo "myObject is an instance of sampleClass";

使用gettype/settype来读取/设置变量的类型:

$a = 56;
// integer
echo gettype($a).'<br />';
settype($a, 'double');
// double
echo gettype($a).'<br />';

而PHP也提供了如下函数用于判断变量类型:

is_array()/is_double()/is_float()/is_real()/is_long()/is_int()/is_integer()/is_string()/is_bool()/is_object()/is_resource()/is_null()/is_scalar()/is_numeric()/is_callable()

三个特殊的测试函数:

isset(): 判断变量是否存在.

unset(): 删除变量.

empty(): 判断变量是否为空.

使用数组

使用array进行数组的初始化:

$arr = array(1, 2, 3, 4, 5);

而循环数组既可以使用for, 也可以使用foreach:

$arr = array(1, 2, 3, 4, 5);
for ($i = 0; $i < count($arr); $i++) {
  echo $arr[$i].' ';
}
echo '<br />';
foreach($arr as $item) {
  echo $item.' ';
}

但PHP的数组实际上为一个map结构.

$arr = array(1, 2);

实际上存储为:

$arr = array("0" => 1, "1" => 2);

而map型结构, 可使用如下的循环: foreach/each/list

$arr = array("a" => 1, "b" => 2);
foreach($arr as $key => $value) {
  echo $key.' => '.$value.' ';
}
echo '<br />';
reset($arr);
while ($ele = each($arr)) {
  echo $ele['key'].' => '.$ele['value'].' ';
}
echo '<br />';
reset($arr);
while (list($key, $value) = each($arr)) {
  echo $key.' => '.$value.' ';
}

关联数组的函数

使用sort函数对数组进行排序:

$arr = array('Tires', 'Oil', 'Spark Plugs');
sort($arr);
foreach($arr as $key => $val) {
  echo $key.' => '.$val.'<br />';
}

而sort函数支持第二个参数, 用于排序的判断: SORT_REGULAR, SORT_NUMERIC, SORT_STRING.

但如果针对的是map型数组, 则可使用asort(根据value进行排序)和ksort(根据key进行排序):

$arr = array('Tires' => 100, 'Oil' => 10, 'Spark Plugs' => 4);
asort($arr);
// Spark Plugs => 4 Oil => 10 Tires => 100 
foreach($arr as $key => $val) {
  echo $key.' => '.$val.' ';
}
echo '<br />';
ksort($arr);
// Oil => 10 Spark Plugs => 4 Tires => 100
foreach($arr as $key => $val) {
  echo $key.' => '.$val.' ';
}
echo '<br />';

反序情况下, 使用rsort()/arsort()/krsort()即可.

乱序可使用shuffle().

字符串操作和正则表达式

使用trim()/ltrim()/rtrim()去除字符串的空白字符.

strtoupper: 将字符串转为大写.

strtolower: 将字符串转为小写.

ucfirst: 将字符串的第一个字母大写.

ucwords: 将字符串中的每个单词的第一个字母大写.

explode进行字符串的分割存储于数组, 而implode/join将数组合并成字符串.

$content = "hello,world";
$arr = explode(',', $content);
// hello world
for ($i = 0; $i < count($arr); $i++) {
  echo $arr[$i].' ';
}
echo '<br />';
$con = implode(',', $arr);
// hello,world
echo $con;

substr(string str, int start[, int length]): 获取子字符串.

strcmp()/strcasecmp()/strnatcmp(): 比较字符串.

strlen(): 获取字符串的长度.

字符串中查找子串: strstr()/strchr()/strrchr()/stristr()

strpos()/strrpos()

替换字符串: str_replace()/substr_replace()

复用代码和编写函数

在PHP中可以使用require()或者include()来复用代码. require()和include()差不多, 唯一的区别在于当失败时候, require()提示错误, 而include()则仅仅警告.

require_once()/include_once()只加载一次文件.

reusable.php:

<?php
  echo 'Here is a very simple PHP statement.<br />';
?>

test.php:

<?php
  echo 'This is the main file.<br />';
  require('reusable.php');
  echo 'The script will end now.<br />';
?>

浏览器显示:

This is the main file.
Here is a very simple PHP statement.
The script will end now.

PHP中, 定义函数的格式为:

function func(){
  // ...
}

传参部分, 也支持传递默认参数:

function my_function($arg1, $arg2=2, $arg3=4) {
  echo 'arg1:'.$arg1.'<br />';
  echo 'arg2:'.$arg2.'<br />';
  echo 'arg3:'.$arg3.'<br />';
}

my_function(111, 333);

理解作用域

函数内声明的变量为局部变量.

函数外声明的变量为全局变量.

超级全局变量(例如$_POST等)不分局部全局.

使用require()仅仅只是内嵌文件, 并不会影响作用域.

关键字global用于定义全局变量.

变量可以使用unset()进行删除.

function fn() {
  global $var; 
  $var = 'content';
}
fn();
echo $var;

传参通常分为传值和传引用. 正常情况下传值, 特殊要修改传入的参数, 则传引用, 参数前加"&"即可.

本文转载自:https://my.oschina.net/voler/blog/841346

猩红之月
粉丝 0
博文 2
码字总数 128
作品 0
海淀
程序员
私信 提问

暂无文章

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
7
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部