学习php圣经<php和mysql Web开发>的笔记
第一章 快速入门
php两种标记
双引号和单引号中的变量
单引号不解析php变量, 双引号则会解析变量值
$a = 1; echo "a=$a";
echo 'a=$a';
|
heredoc语法
通过标志(theEnd)来作为关闭标记, 只需要保证不会出现在文本中
echo <<<theEnd line 1 line 2 line 3 theEnd;
line 1 line 2 line 3
|
php变量语法
- 区分大小写, 不同于函数名
- 可以与函数名相同 (函数则不可以与另一个函数名相同)
- 不需要先声明
声明常量
常量引用时不需要$
define("PI", 3.14) echo PI;
|
引用
引用不是指针, 而是别名, 此时$a
和$b
都指向了内存中的相同地址
$a = 5; $b = &$a; $a = 7;
unset($a);
|
操作符优先级
and
or
xor
优先级比&&
||
低
类型判断
函数gettype
可以用于返回类型的字符串形式, settype
用于设置类型
$a = 1; echo gettype($a);
settype($a, 'float'); echo gettype($a);
|
第二章 数据存储和读取
文件读写
读写模式
模式 |
模式名称 |
意义 |
r |
读 |
从头开始读, 加上+ 表示读写 |
w |
写 |
不存在文件时会创建文件, 存在时则会清空并从头开始写, 加上+ 表示读写 |
x |
谨慎写 |
如果文件不存在则会返回false 并抛出错误, 其他同w |
b |
二进制 |
win会区分二进制文件和文本文件, linux则不会区分, 推荐使用 |
a |
追加 |
不存在文件时会创建文件, 存在时则从文件尾部开始写, 加上+ 表示读写 |
t |
文本 |
win下的一个选项, 不推荐使用 |
分隔符
fopen("c:\\flag","r");
fopen("../flag","r");
|
写文件
$fp = fopen("log.txt", "ab"); fwrite($fp, "aaa"); file_put_contents("log.txt", "aaa"); fputs($fp, "aaa"); fclose($fp);
|
读文件
while(!feof($fp)){...};
while(!feof($fp)){ $char = fgetc($fp); if(!feof($fp)){ echo ($char == "\n" ? "<br/>":$char); } }
fgets/fgetss/fgetcsv
fread()
readfile($filename); fpassthru($fp); file($filename); file_get_contents($filename);
|
其他文件操作
file_exists($filename);
filesize($filename);
unlink($filename);
rewind()/fseek()/ftell();
flock();
|
第三章 数组
创建数组
数组支持在结尾添加元素
// array $pro = array('Tires', 'Oil', 'Spark'); $pro = array('Tires' => 100, 'key' => value); // since php5.4 $pro = ['Tires', 'Oil', 'Spark']; $pro[3] = 'Plugs'; // 多维数组 $multi_pro = array(array('tires', 100), array('Spark', 99) );
|
访问数组
循环
for($i = 0; $i < 3; $i++){..} foreach($pro => $value){...} // foreach($pro as $key => $value){...} //
|
数组排序
// 字典序,区分大小写 sort() asort() ksort() // 反序 rsort() arsort() krsort() // 自定义序 usort($array, $func) // 数组随机 shuffle() // 数组逆序 array_reverse()
|
数组操作
进出数组
array_push($array, $item); array_pop($array);//删除末尾
|
数组浏览
// 返回当前元素并指向下一个元素 each() // 指向下一个元素并返回新的元素 next() // 返回当前元素 current() // 返回指向第一个元素的指针 reset // 返回指向最后一个元素的指针 end() // 指向上一个元素并返回新的元素 prev()
|
统计数组
count()/sizeof()
array_count_values()
|
其他操作
array_walk($array, $func, [userdata]);
func($value, $key, $userdata);
extract($array);
|
第四章 字符串
字符串截断
trim()
ltrim()
rtrim()/chop()
|
html转换
htmlspecialchars();
n2br();
|
大小写
strtoupper() strtolower();
ucfirst();
ucwords()
|
格式化输出
%[+]['padding_character][-][width][.precision]type
|
+
表示正数输出 +
padding_character
表示输出前缀, 除0
和
外都需要添加`
-
表示左对齐
width
表示宽度
.precision
表示小数点后位数
类型 |
意义 |
b |
解释为整数并作为二进制输出 |
c |
解释为整数并作为字符输出 |
d |
解释为整数并作为小数输出 |
e |
解释为双精度并以科学计数法打印, 精度是小数点后的数字个数 |
E |
同e, 打印为大写E |
f |
解释为双精度并作为浮点数输出 |
F |
解释为浮点数并打印与locale无关的浮点数 |
g |
转换规范类型e或f的简短输出 |
G |
转换规范类型E或F的简短输出 |
o |
解释为整数并作为8进制输出 |
s |
解释为字符串输出 |
u |
解释为整数并作为非指定小数输出 |
x |
解释为整数并作为16进制小写输出 |
X |
解释为整数并作为16进制大写输出 |
字符串连接切分
explode($separator, $string);
implode($separator, $array)/join();
|
子串
substr($strings, start, [length]);
|
比较
strcmp()
strcasecmp()
strnatcmp()
|
查找
strpos函数如果不存在会返回false
, 在弱类型比较中等同于0
, 建议使用===
作比较
strstr($string, $substring)/strchr();
stristr($string, $substring);
strrchr($string, $substring);
strpos($string, $substring, [$offset]);
strrpos($string, $substring, [$offset]);
|
替换
str_replace($old, $new, $string); substr_replace($string, $new, $start, [$length]);
|
回溯引用
模式的回溯引用通过一个反斜杠\
加一个数字或多个来表示, 用来匹配多次出现在一个字符串中的相同子表达式
/^([a-z]+) \1 black sheep/ $a = "baa baa black sheep";
$b = "blah baa black sheep";
|
正则分割
print_r(preg_split("/\.|@/", "user@admin.cn"));
admin cn
|
第五章 代码重用和函数
auto_prepend_file
// php.ini auto_prepend_file = "/path/to/header.php"; auto_append_file = "/path/to/footer.php"; // .htaccess, 目录中每次每个文件都要进行处理, 性能较低 php_value auto_prepend_file "/path/to/header.php" php_value auto_append_file "/path/to/footer.php" // 考虑安全问题可以使用readfile读入而不会自动解析代码
|
闭包
闭包函数具有对全局作用域变量的访问, 但必须在闭包函数定义中使用use
关键字显式定义
第六章 面向对象
类属性修饰符
默认为public
private
不可被继承, protected
可以被继承
final关键字
用于禁止类被继承或者函数被覆盖
不支持多重继承
单一继承, 但是可以支持类似java的interface
interface Displayable{ function display(); } class Test implements Displayable{ function display(){ ... } }
|
或者使用
Trait
, 注意
Trait
会覆盖类继承的同名方法, 而类中自定义的方法可以覆盖
Trait
的方法
trait logger{ public function logmessage($message){ ... } } class Test{ use logger; }
|
如果使用了多个同名的
Trait
, 需要用
insteadof
声明所使用的函数
灵活的使用标记
当程序中需要大段的打印html代码时, 可以使用如下的方法
<?php if(){...} else{ ?> html... <?php }
|
常量和静态方法
常量用const
定义, 静态方法用static
修饰, 可以在未初始化前调用
魔术方法
__call($method, $p)
__callStatic()
__autoload()
function __autoload($name){ include_once $name.".php"; }
|
迭代器和生成器
名称空间
如果在文件中声明名称空间, 文件的第一行代码必须是名称空间声明
当没有指定完整的名称空间时, 都会认为在当前名称空间, 如果找不到则会在全局名称空间中寻找, 全局名称空间为\
namespace bob\html\page;
use bob\html\page;
use bob\html\page as www;
|
第七章 错误和异常处理
抛出异常
在php中, 异常必须手动抛出
throw new Exception($message, $code);
|
注意如果异常没有匹配到catch
块将报Error
异常类
Exception
- getCode(): 返回错误代码
- getMessage(): 返回错误信息
- getFile(): 返回产生异常的文件完整路径
- getLine(): 返回错误代码行号
- getTrace(): 返回异常代码回溯路径的数组
- getTraceAsString(): 返回回溯路径数组的格式化形式
- __toString(): string输出异常
<?php class myException extends Exception{ function __toString(){ return "<strong>".$this->getMessage()."</strong>"; } } try{ throw new myException("error"); }catch(myException $m){ echo $m; }catch(Exception $m){ echo $m; } ?>
|
第八章 web数据库设计
避免保存冗余数据, 当冗余数据过多会出现修改, 插入和删除异常
避免出现大量空值
第九章 Web数据库创建
安装步骤
- 安装文件
- 如果需要, 创建并设置MySQL的运行用户
- 设置路径
- 如果需要, 运行mysql_install_db
- 设置root用户密码
- 删除匿名用户和测试数据库
- 启动MySQL并设置为自动运行
大小写
sql语句不区分大小写, 数据库名称和表名称区分大小写(linux下)
创建用户
创建用户可以使用
create user user_info identified by password;
|
或者使用grant自动创建用户
-- since mysql 5.5.7 grant privileges on item to user_info identified by password;
|
权限
大部分情况下, php脚本只需要select
, insert
, update
, delete
操作
可以通过grant
授予和revoke
取回, 部分权限如file
具有极大的安全问题
如果所运行的grant语句已经执行, 但是尝试登陆时被拒绝, 通常是因为安装中的匿名用户没有被删除
查看数据库
-- 查看所有数据库 show databases; -- 显示数据库结构 describe database_name;
|
部分类型
当读取char类型或者写入varchar数据时, mysql将过去结尾处多余的空格
blob, 二进制大对象, 可以用来存储图像声音数据等
作者: cjm00n
地址: https://cjm00n.top/Web/php-and-mysql-book-report.html
版权声明: 除特别说明外,所有文章均采用 CC BY 4.0 许可协议,转载请先取得同意。
评论