php输出语句
echo 'hello php';
echo 'hello', 'world';
------------
// print 与 echo 唯一区别就是只能有一个参数
print 'hello php';
------------
// var_dump 是一个函数,必须跟上 () 调用
// 可以将数据以及数据的类型打印为特定格式
var_dump('hello php');
// => 'string(9) "hello php"'
作业 循环数据到表格
文件读写参考地址:http://www.w3school.com.cn/php/php_ref_filesystem.asp
二维数组分割参考地址:https://zhidao.baidu.com/question/1052777725879858819.html
换行符参考地址:https://segmentfault.com/q/1010000006994684
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Page Title</title>
</head>
<body>
<?php
$str = file_get_contents("names.txt");
$arr = explode(PHP_EOL, $str);
echo "<table border='1'>";
foreach ($arr as $key => $value) {
echo ($key);
echo "<tr>";
$arrd = explode("|", $value);
echo "<td>" . $arrd[0] . "</td>";
echo "<td>" . $arrd[1] . "</td>";
echo "<td>" . $arrd[2] . "</td>";
echo "<td>" . $arrd[3] . "</td>";
}
echo "</tr>";
echo "</table>";
?>
</body>
</html>
提前练习:遍历数组
foreach参考地址:https://zhidao.baidu.com/question/52885736.html
<?php
$arr = array(//定义外层数组
array(1, '高某', 'A公司', '北京市'),
array(2, '谢某', 'B公司', '上海市'),
array(3, '王某', 'C公司', '湖南'),
array(4, '徐某', 'D公司', '河北')
);
// 第一种
for ($i = 0; $i < count($arr); $i++) {
for ($j = 0; $j < count($arr[$i]); $j++) {
echo $arr[$i][$j];
}
echo "<br/>";
}
//第二种
foreach ($arr as $key => $value) {
foreach ($value as $j) {
echo $j[0];
# code...
}
echo "</br>";
}
?>
今天配置虚拟主机添加了一个 ServerAlias
老师做的表格
trim()参考地址:http://www.w3school.com.cn/php/func_string_trim.asp
作用:移除字符串两侧的空白字符或其他预定义字符。
strpos()参考地址:http://www.w3school.com.cn/php/func_string_strpos.asp
作用:查找字符串在另一字符串中第一次出现的位置
没找到返回的是false
strtolower()参考地址: http://www.w3school.com.cn/php/func_string_strtolower.asp
所有字符转换为小写
substr()参考地址:http://www.w3school.com.cn/php/func_string_substr.asp
返回字符串的一部分
<?php
$str = file_get_contents("names.txt");
$lines = explode(PHP_EOL, $str);
foreach ($lines as $value) {
if (!$value) continue;
$data[] = explode("|", $value);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<table border='1'>
<thead>
<tr>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>邮箱</td>
<td>主页</td>
</tr>
</thead>
<?php foreach ($data as $value_v) : ?>
<tr>
<?php foreach ($value_v as $xiangxivalue) : ?>
<?php $xiangxivalue = trim($xiangxivalue); ?>
<?php if (strpos($xiangxivalue, "http://") === 0) : ?>
<td><a href="<?php echo strtolower($xiangxivalue) ?>;"><?php echo substr($xiangxivalue, 7); ?></a></td>
<?php else : ?>
<td><?php echo $xiangxivalue ?></td>
<?php endif ?>
<?php endforeach ?>
</tr>
<?php endforeach ?>
</table>
</body>
</html>
用模块里面的API(以mb_strlen()为例子)
使用mb的API报错
1.解决方法:复制一份改成php.ini
2.设置extension_dir
3.找到需要的模块解开注释
4.查看把php.ini放在那个目录
5.在查看phpinfo();
6.重新启动apq,测试(ok)
7.在自己目录设置php.ini 需要设置apache,httpd.conf里面的:PHPIniDir
8.测试是否配置成功(ok)
老师的配置流程
// PHP 所有能力都是函数,内置1000多个函数
$str = 'hello';
// 获取字符串长度
echo strlen($str);
echo '<br>';
// 获取中文字符串(宽字符)的长度
// strlen 只能获取拉丁文的长度
// 内置成员函数直接使用
echo strlen('你好');
echo '<br>';
// PHP 中专门为 宽字符集 添加了一套 API
// 这一套 API 不在内置的 1000+ 里面,而是在一个模块(php_mbstring.dll)中
// 模块成员必须通过配置文件载入模块过后再使用
// 所有的API 都是 mb_xxxx
echo mb_strlen('你好');
// 配置 PHP 扩展的步骤
// 1. 在 PHP 的安装目录去创建一个 php.in
// 2. extension_dir
// 3. ;extension=php_mbstring.dll
// 4. 默认Apache加载的php.ini 是去 Windows目录找的
// 5. 可以通过 Apache 的配置文件修改默认加载路径 PHPIniDir
php中的REPL环境
字符串数字补0
参考地址:https://www.jb51.net/article/49956.htm
php.ini 中 display_errors = On 设置
老师在这个地方点出了display_errors = On 是干嘛用的
(On)才会在界面上显示 notice 错误
开发阶段一定设置为 On 生产阶段(上线)设置为 Off> 开发阶段一定设置为 On 生产阶段(上线)设置为 Off
php数组学习
array_keys — 返回数组中部分的或所有的键名
array_values — 返回数组中所有的值
array_key_exists — 检查给定的键名或索引是否存在于数组中
// 类型: 1. 索引数组 2. 关联数组
// 方式: 1. array() 2. [] (PHP 5.4)
$dict = array(
'hello' => '你好',
'hello1' => '你好',
'hello2' => '你好',
);
var_dump(array_keys($dict));
// => ['hello', 'hello1', 'hello2']
var_dump(array_values($dict));
// => ['你好', '你好', '你好']
var_dump(array_key_exists('hello', $dict));//true
var_dump(array_key_exists('hello4', $dict));//false
isset和empty学习
isset — 检测变量是否设置
empty — 检查一个变量是否为空
如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
isset
<?php
$var = '';
var_dump(isset($var));
$a = 'test';
$b = 'anothertest';
var_dump(isset($a));
var_dump(isset($b));
unset($a);
var_dump(isset($a));
var_dump(isset($a, $b));
var_dump(isset($b));
$foo = null;
var_dump(isset($foo));
// 数组中的元素
echo '===========================', '<br/>';
$a = array('test' => 1, 'hello' => null, 'pie' => array('a' => ' apple '));
var_dump(isset($a['test']));
var_dump(isset($a['foo']));
var_dump(isset($a['hello']));
var_dump(array_key_exists('hello', $a));
echo '===========================', '<br/>';
var_dump(isset($a['pie']['a']));
var_dump(isset($a['pie']['b']));
var_dump(isset($a['cake']['a']['b']));
echo '===========================', '<br/>';
// PHP 5.4 changes how isset() behaves when passed string offsets.
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));//f
var_dump(isset($expected_array_got_string[0]));//t
var_dump(isset($expected_array_got_string['0']));//t
var_dump(isset($expected_array_got_string[0.5]));//t
var_dump(isset($expected_array_got_string['0.5']));//f
var_dump(isset($expected_array_got_string['0 Mostel']));//f
?>
empty
$var = 0;
var_dump(empty($var));
var_dump(isset($var));
扩展知识 转换为布尔值
#php日期时间
第二种配置文件方式设置时区
<?php
//1.通过代码设置时区 推荐
date_default_timezone_set('PRC');
//2.通过配置文件设置时区
// date.timezone = PRC
//time 获取到的是 秒数为单位的时间戳
echo time();
//格式化一个时间戳
//第一个参数是一个时间格式
//第二个参数是一个时间戳
//默认的时间戳获取的就是格林xx时间
echo date('Y-m-d H:s', time());
$str = '2017-10-22 15:18:58';
//对已有格式时间做格式化
//strtotime 可以用来将一个有格式的时间字符串,转换为一个时间戳
$timestamp = strtotime($str);
//<b\r>这个要看页面源码才能推出来<br>
//推出来了 '' 和 ""的区别
//'' 一个是给字符串用的
//“” 一个是给页面换行用的
echo date('Y年m月d日<b\r>H:i:s',$timestamp);
echo date("Y年m月d日<b\r>H:i:s",$timestamp);
?>
php常量 define()
<?php
//php 中可以通过 define函数定义 一个常量
//常量的特点:定义后不能被修改,也是临时存放数据的容器
//什么时候用常量:一般程序的配置信息(不会在运行过程中修改) 都会在常量中定义
//变量或函数都是采用 snake_case (小写字母加下划线)命名规则
//常量是SYSTEM_NAME 命名规则
//第一个参数是常量名称
//第二个是常量的值
//第三个参数是常量名称是否忽略大小写
define('SYSTEM_NAME','阿里百秀');
echo SYSTEM_NAME;
// 第三个参数是常量名称是否忽略大小写 默认为false 不忽略
define('SYSTEM_VERSION', '1.0', true);
echo SYSTEM_VERSION;
// echo system_version;
?>
php require()引入
demo.PHP代码
<?php
//#require 可以用于在当前脚本中载入一个别的脚本文件并且执行他
//require 在每一次调用的时都会载入对应文件
//报错代码:
// require 'config.php';
// echo SYSTEM_NAME;
// require 'config.php';
// echo SYSTEM_NAME;
// require_once==============================
// require_once 如果之前载入过,不再执行(只执行一次)
// 由于类似于 定义常量 定义函数 这种操作不能执行多次
// 所以 require_once 更加合适载入这种文件
require_once 'config.php';
echo SYSTEM_NAME;
require_once 'config.php';
echo SYSTEM_NAME;
?>
config.php代码
<?php
/**
* 定义公共的配置信息
* 1. 便于维护
* 2. 公共使用
*/
define('SYSTEM_NAME', 'HELLO');
define('SYSTEM_VERSION', '1.0.0');
define('DB_HOST', '192.168.110.120');
#php include() 加载文件
08-include.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<!-- require 特点: 一旦被载入的文件不存在就会报一个致命错误,当前文件不再往下执行 -->
<!-- include 特点: 载入文件不存在不会报错误(会有警告,警告不用管),当前文件继续执行 -->
<?php include 'aside.php'; ?>
<main>
这是主要的区域
</main>
</body>
</html>
09-include2.PHP
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<?php require 'aside.php' ?>
<main>
另外一个页面
</main>
</body>
</html>
aside.php
<aside>
这是侧边栏1111
</aside>
老师对 载入文件的总结
#表单的概念
logo.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
</head>
<body>
<form action="foo.php" method="post">
<table border="1">
<tr>
<td>用户名</td>
<td><input type="text" name="username" /></td>
<tr>
<tr>
<td>密码</td>
<td><input type="text" name="password" /></td>
<tr>
<tr>
<td></td>
<!-- <td><input type="submit" value="登陆" /></td> -->
<!-- BUTTON 默认也是 submit -->
<td><button>登录</button></td>
</tr>
</table>
</form>
</body>
</html>
foo.php
<?php
var_dump($_GET);
// $_GET 用于接收 URL 地址中的提交数据(一般是 GET 参数)
var_dump($_POST);
// $_POST 用于接收 请求体 中提交的数据(一般是 POST 提交的数据)
var_dump($_REQUEST);
// $_REQUEST = $_GET + $_POST
?>
效果:
作业 学习函数
手册案例1
$makefoo = true;
/* 不能在此处调用foo()函数,
因为它还不存在,但可以调用bar()函数。*/
bar();
if($makefoo){
function foo(){
echo 'wwww';
}
}
/* 现在可以安全调用函数 foo()了,
因为 $makefoo 值为真 */
if($makefoo) foo();
function bar(){
echo 'abc';
}
####### 手册案例2
function foo()
{
function bar()
{
echo 'abc';
}
}
/* 现在还不能调用bar()函数,因为它还不存在 */
foo();
/* 现在可以调用bar()函数了,因为foo()函数
的执行使得bar()函数变为已定义的函数 */
bar();
手册案例3(递归函数)
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
recursion(0)
手册案例 函数的参数
function makecoffee($type ='嘿嘿'){
return "abcd$type.\n";
}
echo makecoffee();//abcd嘿嘿.
echo makecoffee(null);//abcd.
echo makecoffee('espresso');//abcdespresso.
手册的案例 函数的参数2
is_null()-判断是不是null
参考地址:https://www.w3cschool.cn/php/php-is_null.html
join()-数组元素组合为一个字符串
参考地址:http://www.w3school.com.cn/php/func_string_join.asp
function makecoffee($type = array('a'), $coffeeMaker = null)
{
$device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;
return "Making a cup of" . join(',', $type) . "width $device.\n";
}
echo makecoffee();//Making a cup ofawidth hands.
echo makecoffee(array('cappuccino','lavazza'),'teapot')//Making a cup ofcappuccino,lavazzawidth teapot.
作业 学习变量
手册 案例1 &$引用
$foo = 'Bob';
$bar = &$foo;
$bar = "My name is $bar"; //修改 $bar变量
echo $bar;//My name is Bob
echo $foo;//My name is Bob
手册 案例2
<?php
$foo = 25;
$bar = &$foo; //合法的赋值
$bar = &(24 * 7);// 非法; 引用没有名字的表达式
function test(){
return 25;
}
$bar = $test();//非法
?>
变量范围
手册 案例1
$a = 1;
function test()
{
echo $a;//报错未定义
}
test()
手册 案例2 要使用 global访问全局变量
$a = 1;
$b = 2;
// PHP 中全局变量在函数中使用时必须声明为 global。
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;//3
手册案例3
$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显示了超全局变量的用处:
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;//3
?>
拓展 数据类型转换方式
<?php
// 第一种转换方式: (int) (bool) (float) (string) (array) (object)
$num1 = 3.14;
$num2 = (int)$num1;
var_dump($num1);//float(3.14)
var_dump($num2);//int(3)
// 第二种转换方式: intval() floatval() strval()
$str = '123.9abc';
$int = intval($str);
$float = floatval($str);
$str = strval($float);
var_dump($int);//int(123)
var_dump($float);//float(123.9)
var_dump($str);//string(5) "123.9"
// 第三种转换方式: settype();
$num4 = 12.8;
$flg = settype($num4,'int');
var_dump($flg);//bool(true)
var_dump($num4);//int(12)
?>
重要 数据类型
常见的 PHP 数据类型与 JavaScript 基本一致:
string(字符串)
<?php
$foo; // 申明一个变量,变量名为 `foo`,未对其进行赋值
$bar = 'baz'; // 申明一个变量,将一个值为 `baz` 的字符串赋值给它
echo $foo; // 输出一个变量名为 `foo` 的变量
fn($bar); // 将一个变量名为 `foo` 的变量作为 `fn` 的实参传递
integer(整型)—— 只能存整数
float(浮点型)—— 可以存带小数位的数字
boolean(布尔型)
array(数组)
object(对象)
NULL(空)
Resource(资源类型)
Callback / Callable(回调或者叫可调用类型)
字符串
PHP 有多种创建字符串的方式:单引号、双引号等。
单引号字符串
不支持特殊的转义符号,例如 \n
如果要表示一个单引号字符内容,可以通过 \' 表达
如果要表示一个反斜线字符内容,可以通过 \\ 表达
双引号字符串
支持转义符号
支持变量解析