php实例教程
大约 17 分钟
php实例教程
php如何处理进制转换
- 十进制转二进制decbin()
echo decbin(12); //输出 1100
- 十进制转八进制 decoct()
echo decoct(15); //输出 17
- 十进制转十六进制 dechex()
echo dechex(10); //输出 a
- 二进制转十六制进 bin2hex()
$binary = "11111001";
$hex = dechex(bindec($binary));
echo $hex;//输出f9
- 二进制转十制进 bindec()
echo bindec('110011'); //输出 51
- 八进制转十进制 octdec()
echo octdec('77'); //输出 63
- 十六进制转十进制 hexdec()
echo hexdec("F"); //输出 15
- 任意进制转换 base_convert()
$hexadecimal = 'A37334';
echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100
php缓冲区
// 开启缓冲控制
ob_start();
for ($i=0; $i<10;$i++)
{
echo $i;
}
// 这此时页面显示0123456789
// 获取缓冲内容
$output = ob_get_contents();
// 清空缓冲区,此时页面显示为空了
ob_clean();
// 这此时页面显示0123456789
echo $output;
// 此时页面显示为空了,ob_get_clean()清空并返回缓冲内容
$obput = ob_get_clean();
// 此时页面显示为0123456789
echo $obput;
// 结果:0123456789
自加、自减、三目运算符
#自加
$a=10;
echo $a++; //先用再加,最后结果为10
echo ++$a; //先加再用,最后结果为11
$a = 10;
$b = $a+ ++++$a;
echo $a; //结果为12
echo "
";
echo $b; //结果为22
#结合性导致的问题(++的优先级比+的高,且为右结合)
instanceof例子
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例:
<?php
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>
php编码转换
$myvar = "中国";
#mb_convert_encoding("要转换的字符串","目标编码","源编码");
echo mb_convert_encoding($myvar,"gb2312","utf-8");
echo nl2br("\n");
#iconv("源编码","目标编码","要转换的字符串");
echo iconv("utf-8","gb2312",$myvar);
php类型转换
类C强制转换
#第一种转换方式: (int) (bool) (float) (string) (array) (object)
2.$num1=3.14;
3.$num2=(int)$num1;
4.var_dump($num1); //输出float(3.14)
5.var_dump($num2); //输出int(3)
获取变量整数、浮点、字符串值
#第二种转换方式: intval() floatval() strval()
2.$str="123.9abc";
3.$int=intval($str); //转换后数值:123
4.$float=floatval($str); //转换后数值:123.9
5.$str=strval($float); //转换后字符串:"123.9"
使用settype()封装函数
#bool settype ( mixed &$var , string $type )
type 的可能值为:
“boolean” (或为“bool”,从 PHP 4.2.0 起)
“integer” (或为“int”,从 PHP 4.2.0 起)
“float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用)
"string"
"array"
"object"
“null” (从 PHP 4.2.0 起)
2.$num4=12.8;
3.$flg=settype($num4,"int");
4.var_dump($flg); //输出bool(true)
5.var_dump($num4); //输出int(12)
php字符串
多行字符串使用
heredoc类似于双引号可以解析变量
$name = 'Hello';
echo <<<EOD
里面的变量$name会解析。
EOD;
// 可以使用花括号进行变量范围定位
nowdoc类似于单引号不会解析变量
$name = 'Hello';
echo <<<'EOD'
里面的变量$name不会解析。
EOD;
字符串截取单个字符
//修改第一个字符,从0开始
$myvar[0] = 'Q';
//取得第一个字符
$first = $myvar[0];
//取得最后一个字符
$last = $myvar[strlen($myvar)-1];
#字符串可以用 '.'(点)运算符连接起来
获取字符串的部分
//多字节,获取字符串的部分
$return = mb_substr($myvar,0,3,"utf-8");
//输出:你好M
$return = mb_strstr($myvar,"Mo",false,"utf-8");
//输出:Moments
$return = mb_strstr($myvar,"M",true,"utf-8");
//输出:你好
//对待一个UTF8的中文字符是3个长度
//对待一个gbk的中文字符是2个长度
header("content-Type:text/html;charset=utf-8");
//设置内部编码
mb_internal_encoding('UTF-8');
//测试
$cn_str="钓鱼岛是中国的hehe";
$en_str="this is just a test";
//使用substr
echo substr($cn_str,0,3).'<br/>'; //钓
echo substr($en_str,0,3).'<br/><br/>'; //thi
//使用mbsubstr()
echo "mb_substr-3:".mb_substr($cn_str,0,3).'<br/>'; //钓鱼岛 按照字来划分
echo "substr-3:".substr($cn_str,0,3).'<br/>';//钓 按照字节来划分
echo "mb_strcut-3:".mb_strcut($cn_str,0,3).'<br/><br/>'; //钓 按照字节来划分
echo "mb_substr-4:".mb_substr($cn_str,0,4).'<br/>'; //钓鱼岛 按照字来划分
echo "substr-4:".substr($cn_str,0,4).'<br/>'; //钓 按照字节来划分(出现乱码)
echo "mb_strcut-4:".mb_strcut($cn_str,0,4).'<br/><br/>'; //钓 按照字节来划分(不会出现乱码)
echo strlen($cn_str).'<br/>'; //26
echo mb_strlen($cn_str).'<br/>'; //12
echo iconv_strlen($cn_str).'<br/>';//26
字符串分割
explode()函数把字符串打散为数组。
#实例
$str = "Hello world. I love Shanghai!";
print_r (explode(" ",$str));
#输出结果
Array ( [0] => Hello [1] => world. [2] => I [3] => love [4] => Shanghai! )
字符串合并
implode() 函数返回由数组元素组合成的字符串。
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
#输出结果
Hello World! I love Shanghai!
插入html换行符
$myvar = "Hello World!\nMoments";
echo nl2br($myvar);
PHP字符串加密(不可逆加密)
#md5加密
$myvar = "Moments";
echo md5($myvar);
echo nl2br("\n");
#crypt()加密
echo @crypt($myvar,"qq");
PHP字符串可逆加密
#base64加密
$myvar = "Moments";
$result = base64_encode($myvar);
echo $result;
echo nl2br("\n");
$result = base64_decode($result);
echo $result;
echo nl2br("\n");
#urlencode链接加密
$myvar = "http://www.pythonschool.com";
$result = urlencode($myvar);
echo $result;
echo nl2br("\n");
$result = urldecode($myvar);
echo $result;
addslashes
使用反斜线引用字符串。
$str = "what's your name?";
// 输出:what\'s your name?
echo addslashes($str);
chr
返回相对应于ascii所指定的单个字符。
// 输出A
echo chr(65);
chunk_split
将字符串分割成小块
$a = "ABCD";
// 输出A@B@C@D@
echo ($a = chunk_split($a, 1, '@')) . "\r\n";
// 输出A@B@C@D
echo chop($a, '@');
count_chars
统计字符出现的次数
$a = "Hello World!";
print_r(count_chars($a, 1));
Array
(
[32] => 1
[33] => 1
[72] => 1
[87] => 1
[100] => 1
[101] => 1
[108] => 3
[111] => 2
[114] => 1
)
crypt
对称加密
// Mo4BbD57XJI9U
echo crypt("password","Moments");
explode
使用一个字符串分割另一个字符串,结果为数组
array explode(string $delimiter, string $string[, int $limit])
htmlspecialchars
将特殊字符转换为HTML实体
string htmlspecialchars(cstring $string[, int $flags=ENT_COMPAT|ENT_HTML401[,
string $encoding=ini_get("default_charset")[, bool $double_encode = TRUE]]])
// <&>
echo ($a = htmlspecialchars('<&>')) . "\r\n";
// <&>
echo htmlspecialchars_decode($a);
implode
将一个一维数组的值转化为字符串。
$arr = ['A', 'B', 'C'];
$s = implode('@', $arr);
echo $s;
ord
返回字符的ASCII码值
$a = 'A';
echo ord($a) . "\r\n";
echo chr(ord($a));
parse_str
将字符串解析成多个变量
$a = "name=Moments&type[]=0&type[]=1";
parse_str($a, $output);
print_r($output);
similar_text
计算两个字符串的相似度
int similar_text(string $first, string $second [, float &$percent])
$a = 'Hello World!';
$b = 'hello world!';
similar_text($a, $b, $percent);
echo $percent;
str_pad
使用另一个字符串填充字符串为指定长度
string str_pad(string $input, int $pad_length [, string $pad_string = "" [, int $pad_type=STR_PAD_RIGHT]])
$a = 'AAAA';
// ***AAAA***
echo str_pad($a, 10, '*', STR_PAD_BOTH);
str_repeat
重复一个字符串
string str_repeat(string $input, int $multiplier)
$a = 'AAAA';
// ***AAAA******AAAA******AAAA***
echo str_repeat(str_pad($a, 10, '*', STR_PAD_BOTH), 3);
strip_tags
从字符串中却除HTML和PHP标记
string strip_tags(string $str [, string $allowable_tags])
$a = '<h1>Hello World!</h1>';
// Hello World!
echo strip_tags($a);
strstr
查找字符串的首次出现
string strstr(string $haystack, mixed $needle [, bool $before_needle = FALSE ])
$a = 'name=Moments';
echo strstr($a, '=', true);
echo "\n".join(explode('=', $a));
strpos
查找字符串首次出现的位置
$a = 'name=Moments';
if (stripos($a, '=') !== false){
echo '存在=字符串';
}
trim
去除字符串首尾处的空白字符
string trim(string $str [, string $character_mask = "\t\n\r\0\x0B"])
// 如果第二个参数不指定,则默认为
" " (ASCII 32 (0x20)),普通空格符。
"\t" (ASCII 9 (0x09)),制表符。
"\n" (ASCII 10 (0x0A)),换行符。
"\r" (ASCII 13 (0x0D)),回车符。
"\0" (ASCII 0 (0x00)),空字节符。
"\x0B" (ASCII 11 (0x0B)),垂直制表符。
substr
返回字符串的子串
string substr(string $string, int $start [, int $length])
$a = 'Hello World!';
// Hello World
echo substr($a, 0, -1);
php数组
array_search
#返回查找到的元素下标
$myarr = array("A","B","C");
echo array_search("B",$myarr);
array_push
队尾添加数据
#返回增加后数组的大小
$myarr = array("A","B","C");
echo array_push($myarr,"D");
print_r($myarr);
array_unique
#返回删除重复元素后的数组
$myarr = array("A","B","C","B");
print_r(array_unique($myarr));
#unset无返回值
$myarr = array("A","B","C");
unset($myarr[2]);
array_chunk
将一个数组分割成多个
$myarr = array("A","B","C");
$myarr = array_chunk($myarr,2,true);
print_r($myarr);
array array_chunk(array $array, int $size [, bool $preserve_keys = false])
$arr = ['001'=>'a', 'b', 'c'];
$result = array_chunk($arr, 2, true);
print_r($result);
// 结果
Array
(
[0] => Array
(
[001] => a
[0] => b
)
[1] => Array
(
[1] => c
)
)
array_column
返回数组中指定的一列
array array_column(array $input, mixed $column_key [, mixed $index_key = null])
$arr = [['id'=>'001', 'name'=>'Moments'], ['id'=>'002', 'name'=>'ayu']];
$result = array_column($arr, 'name', 'id');
print_r($result);
// 结果
Array
(
[001] => Moments
[002] => ayu
)
array_combine
创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array array_combine(array $keys, array $values)
$a = ['001', '002'];
$b = ['Moments', 'ayu'];
$result = array_combine($a, $b);
print_r($result);
// 结果
Array
(
[001] => Moments
[002] => ayu
)
array_count_values
统计数组中所有的值
array array_count_values(array $array)
$arr = [1, 'A', 'A'];
$result = array_count_values($arr);
ksort($result);
print_r($result);
// 结果
Array
(
[A] => 2
[1] => 1
)
array_diff
计算数组的差集
array array_diff(array $array1, array $array2 [, array $...])
$a = ['id'=>'001', 'name'=>'Moments'];
$b = ['id'=>'002', 'name'=>'ayu'];
$result = array_diff($a, $b);
print_r($result);
$result = array_diff_key($a, $b);
print_r($result);
$result = array_diff_assoc($a, $b);
print_r($result);
// 结果
Array
(
[id] => 001
[name] => Moments
)
Array
(
)
Array
(
[id] => 001
[name] => Moments
)
array_filter
用回调函数过滤数组中的单元
array array_filter(array $array [, callable $callback [, int $flag = 0]])
function myFun($data){
return !($data & 1);
// return $data % 2 == 0;
}
$arr = [1,2,3,4,5];
$result = array_filter($arr, "myFun");
print_r($result);
// 结果
Array
(
[1] => 2
[3] => 4
)
array_flip
交换数组中的键和值
array array_flip(array $array)
$arr = ['id'=>'001', 'name'=>'Moments'];
$result = array_flip($arr);
print_r($result);
// 结果
Array
(
[001] => id
[Moments] => name
)
array_intersect
计算数组的交集
array array_intersect(array $array1, array $array2 [, array $...])
$a = ['id'=>'001', 'name'=>'Moments'];
$b = ['id'=>'001', 'name'=>'ayu'];
$result = array_intersect($a, $b);
print_r($result);
$result = array_intersect_key($a, $b);
print_r($result);
$result = array_intersect_assoc($a, $b);
print_r($result);
// 结果
Array
(
[id] => 001
)
Array
(
[id] => 001
[name] => Moments
)
Array
(
[id] => 001
)
array_key_exists
检查数组里是否有指定的键名或索引
bool array_key_exists(mixed $key, array $array)
$arr = ['id'=>'001', 'name'=>'Moments'];
$result = array_key_exists('id', $arr);
echo $result;
// 结果
1
array_keys
返回数组中部分的或所有的键名
array array_keys (array $array [, mixed $search_value = null [, bool $strict = false]])
$arr = ['id'=>'001', 'name'=>'Moments', 'id_2'=>'001'];
$result = array_keys($arr, '001', true);
print_r($result);
// 结果
Array
(
[0] => id
[1] => id_2
)
array_map
为数组的每个元素应用回调函数
array array_map(callable $callback, array $array1 [, array $...])
function cube($n){
return $n * $n * $n;
}
$arr = [1,2,3];
$result = array_map('cube', $arr);
print_r($result);
// 结果
Array
(
[0] => 1
[1] => 8
[2] => 27
)
array_merge
合并一个或多个数组
$myarr1 = array("one","two");
$myarr2 = array("three","four");
$myarr3 = array_merge($myarr1, $myarr2);
print_r($myarr3);
array array_merge(array $array1 [, array $...])
$a = ['id'=>'001', 'name'=>'Moments'];
$b = ['id'=>'002', 'name'=>'Ayu'];
$result = array_merge($a, $b);
print_r($result);
$result = $a + $b;
print_r($result);
// 结果
Array
(
[id] => 002
[name] => Ayu
)
Array
(
[id] => 001
[name] => Moments
)
array_multisort
对多个数组或多维数组进行排序
bool array_multisort(array &$array1 [, mixed $array1_sort_order = SORT_ASC [,
mixed $array1_sort_flags = SORT_REGULAR [, mixed $...]]])
$a1=array("A","B","B","C");
$a2=array(1,2,3,4);
array_multisort($a1,SORT_ASC,$a2,SORT_DESC);
print_r($a1);
print_r($a2);
// 结果
Array
(
[0] => A
[1] => B
[2] => B
[3] => C
)
Array
(
[0] => 1
[1] => 3
[2] => 2
[3] => 4
)
array_pop
弹出数组最后一个单元(出栈)
mixed array_pop(array &$array)
$a = 'Hello World!';
$arr = str_split($a, 1);
array_pop($arr);
$a = ''.join($arr);
print_r($a);
// 结果
Hello World
array_rand
从数组中随机取出一个或多个单元
mixed array_rand(array $array [, int $num = 1])
$arr = ['a', 'b', 'c', 'd', 'e'];
$result = array_rand($arr, 2);
foreach($result as $key=>$array_replacevalue){
echo $arr[$value] . "\r\n";
}
// 结果
b
e
php函数
用户自定义函数
<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>
引用传递参数
<?php
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str; // outputs 'This is a string, and something extra.'
?>
可变数量的参数列表
<?php
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
?>
php如何处理参数传递
#按值传递
function myfun($myvar){
$myvar = "Moments";
}
$myvar = "Hello World!";
myfun($myvar);
echo $myvar;
#输出的结果为Hello World!
#引用传递
function myfun(&$myvar){
$myvar = "Moments";
}
$myvar = "Hello World!";
myfun($myvar);
echo $myvar;
#输出的结果为Moments
php文件
逐行读取文件
fgets()函数用于从文件中逐行读取文件.
$file = fopen("ok.txt", "r");
while(!feof($file)){
echo fgets($file);
}
fclose($file);
逐字符读取文件
$file = fopen("ok.txt", "r")
while(!feof($file)){
echo fgetc($file);
}
fclose($file);
新建文件
$fp = fopen("myfile.txt","w");
fclose($fp);
文件写入
$fp = fopen("myfile.txt","w");
fwrite($fp,"Hello Moments");
fclose($fp);
读取文件
$fp = fopen("myfile.txt","r");
while($myvar = fread($fp,4)){
echo $myvar;
echo "@";
}
fclose($fp);
复制文件
copy("myfile.txt", "myfile2.txt");
重命名文件
if(file_exists("myfile2.txt")){
rename("myfile2.txt","abc");
}
删除文件
unlink("myfile.txt");
设置权限
chmod("myfile.txt",0777);
filetype()文件类型
switch(filetype("myfile.txt")){
case "file":
echo "file";
break;
case "fifo":
echo "命名管道";
break;
case "char":
echo "字符设备";
break;
case "dir":
echo "目录";
break;
case "block":
echo "块设备";
break;
case "link":
echo "指针";
break;
default:
echo "未知类型";
}
filesize()获取文件大小
#大于2GB可能会有问题,系统是32位导致
echo filesize("myfile.txt");
读取文件相关函数
#将整个文件读入到一个数组中,行为元素,返回数组
print_r(file("myfile.txt"));
#将整个文件读入到一个字符串中,返回字符串。
echo file_get_contents("myfile.txt");
echo nl2br("\n");
#读取已经打开的文件,并且可以规定读取几个字符。
echo fread(fopen("myfile.txt","r"),filesize("myfile.txt"));
echo nl2br("\n");
#读取一个字符
$fp = fopen("myfile.txt","r");
while($myvar = fgetc($fp)){
echo $myvar;
echo "@";
}
fclose($fp);
echo nl2br("\n");
#读取一行
$fp = fopen("myfile.txt","r");
while($myvar = fgets($fp)){
echo $myvar;
echo "@";
}
fclose($fp);
echo nl2br("\n");
#fgetss与fgets一样,但可以过滤掉html和php标记
#将文件读入缓冲区并直接输出,返回大小
echo readfile("myfile.txt");
写入文件相关函数
fwrite(fopen("myfile.txt","w"),"要写入的内容");
file_put_contents("myfile.txt","要写入的内容");
php日期与时间
php日期时间UNIX时间戳
#返回当前unix时间戳(1970年1月1号)
echo time();
#返回指定日期的时间戳
echo mktime($hour = 15, $minute = 42, $second = 40, $month = 12, $day = 25, $year = 2015);
php日期时间格式化
#格式化日期时间
echo date("Y-m-d H:i:s", $timestamp = time());
通过 PHP strtotime() 用字符串来创建日期
$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d);
$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d);
$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d);
php图形图像
php如何进行图形图像编程
php如何创建画布
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/png");
$im = imagecreate(600,200);
$bgcolor = imagecolorallocate($im, 100, 100, 100);
imagepng($im);
imagedestroy($im);
php如何画直线
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/jpeg");
$image = imagecreate(600, 200);
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$linecolor = imagecolorallocate($image, 200, 200, 200);
imageline($image, 0, 0, 600, 200, $linecolor);
imagejpeg($image);
imagedestroy($image);
php如何画英文字符串
#bool imagestring(resource image, int font, int x, int y, string s, int col);
#(x,y)左上角坐村,font(1,2,3,4,5为内置字体)
imagestring($image, 5, 0, 0, "Moments", $linecolor);
php如何画中文字符串
#array imagettftext(resource image, float size, float angle,
#int x, int y, int color, string fontfile, string text);
#image=>图像资源
#size=>字体大小
#angle=>字体角度
#color=>文字的颜色
#fontfile=>字体的文件名称,也可以是远端的文件
#text=>字符串的内容
imagettftext($image, 100, 10, 100, 150, $linecolor, "1.ttf", "Moments");
php获取当前安装的GD库信息
#可以查看到GD所支持的图像格式
var_dump(gd_info());
php获取当前图片的大小信息
$imageresult = getimagesize("1.jpg");
print_r($imageresult);
function getImageType($type){
$imageTypeArray = array
(
0=>'UNKNOWN',
1=>'GIF',
2=>'JPEG',
3=>'PNG',
4=>'SWF',
5=>'PSD',
6=>'BMP',
7=>'TIFF_II',
8=>'TIFF_MM',
9=>'JPC',
10=>'JP2',
11=>'JPX',
12=>'JB2',
13=>'SWC',
14=>'IFF',
15=>'WBMP',
16=>'XBM',
17=>'ICO',
18=>'COUNT'
);
if($type>=0 and $type<=18){
return $imageTypeArray[$type];
}else{
return "其他格式...";
}
}
$myarr = array(
"宽度"=>$imageresult[0],
"高度"=>$imageresult[1],
"类型"=>getImageType($imageresult[2]),
"每种颜色的位数"=>$imageresult['bits'],
"图像的通道值RGB图像默认是3"=>$imageresult['channels'],
"图像的 MIME 信息"=>$imageresult['mime']
);
print_r($myarr);
读取画布相关大小信息
#读取画布相关大小信息
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/png");
$image = imagecreate(600, 200);
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$stringcolor = imagecolorallocate($image, 200, 200, 200);
$myvar = imagesx($image)."*".imagesy($image);
imagestring($image,5,10,10,$myvar,$stringcolor);
imagepng($image);
imagedestroy($image);
通过字符数据读取图片信息
#通过字符数据读取图片信息
$data = file_get_contents("1.jpg");
print_r(getimagesizefromstring($data));
php创建并保存图片
// 创建图像实例
$im = imagecreatetruecolor(100, 100);
// 保存图像
imagepng($im, './test' . image_type_to_extension(IMAGETYPE_PNG));
imagedestroy($im);
#创建图像然后保存
header("Content-Type:text/html;charset=utf-8");
header("Content-Type:image/png");
$image = imagecreate(600, 200);
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$stringcolor = imagecolorallocate($image, 200, 200, 200);
$myvar = imagesx($image)."*".imagesy($image);
imagestring($image, 5, 10, 10, $myvar, $stringcolor);
imagepng($image, "2".image_type_to_extension(IMAGETYPE_PNG));
imagedestroy($image);
php画圆
// 创建一个 200X200 的图像
$image = imagecreate(200, 200);
$image = imagecreatetruecolor(200, 200);
// 分配颜色
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$frontcolor = imagecolorallocate($image, 200, 200, 200);
//刷背景
imagefill($image, 0, 0, $bgcolor); //imagecreatetruecolor
// 画一个黑色的圆
#75*75为圆心,150*150椭圆的宽度和高度,0*360为角度
imagearc($image, 75, 75, 150, 150, -90, 180, $frontcolor);
// 将图像输出到浏览器
header("Content-type: image/png");
imagepng($image);
// 释放内存
imagedestroy($image);
#用imagecreatetruecolor(int x,int y)建立的是一幅大小为 x和 y的黑色图像(默认为黑色),
#如想改变背景颜色则需要用填充颜色函数imagefill($img,0,0,$color);
#imagecreate 新建一个空白图像资源,用imagecolorAllocate()添加背景色
php画直线
imageline($image, 0, -50, imagesx($image), imagesy($image), $linecolor);
php画虚线
#创建画布
$image = imagecreate(600, 200);
#分配背景颜色
$bgcolor = imagecolorallocate($image, 100, 100, 100);
$linecolor = imagecolorallocate($image, 200, 200, 200);
#画对角线
imageline($image, 0, 0, imagesx($image), imagesy($image), $linecolor);
#画虚线
$r = imagecolorallocate($image, 255, 0, 0);
$g = imagecolorallocate($image, 0, 255, 0);
$style = array($r, $r, $r, $r, $r, $r, $g, $g, $g);
imagesetstyle($image, $style);
imageline($image, 0, -50, imagesx($image), imagesy($image), IMG_COLOR_STYLED);
#使用画刷
$brush = imagecreatefrompng("http://www.libpng.org/pub/png/images/smile.happy.png");
imagesetbrush($image, $brush);
imageline($image, 0, -50, 50, 100, IMG_COLOR_STYLEDBRUSHED);
#将图像输出到浏览器
header("Content-Type:image/jpeg");
imagejpeg($image);
php图像复制位置对齐模式
#文件路径
$filename = "1.jpg";
$x_percent = 1;
$y_percent = 1;
$dst_image = imagecreatetruecolor(700, 240);
$src_image = imagecreatefromjpeg($filename);
$dst_x = 0;
$dst_y = 0;
$src_x = 0;
$src_y = 0;
$dst_w = imagesx($dst_image);
$dst_h = imagesy($dst_image);
$src_w = imagesx($src_image) - $src_x;
$src_h = imagesy($src_image) - $src_y;
#图片对齐模式
$flag = "垂直水平居中";
switch($flag){
case "垂直水平居中":
$src_x = ($src_w - $dst_w)/2;
$src_y = ($src_h - $dst_h)/2;
$src_w = $src_w/($src_w/$dst_w);
$src_h = $src_h/($src_h/$dst_h);
break;
case "垂直居中":
$src_y = ($src_h - $dst_h)/2;
$src_h_old = $src_h;
$src_h -= $src_y*2;
$src_w = $src_w/($src_w/$dst_w);
break;
case "水平居中":
$src_x = ($src_w - $dst_w)/2;
$src_w_old = $src_w;
$src_w -= $src_x*2;
$src_h = $src_h/($src_h/$dst_h);
break;
default:
break;
}
#图像复制
imagecopyresized($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
#将图像输出到浏览器
header("Content-Type:image/jpeg");
imagejpeg($dst_image);
#释放内存
imagedestroy($dst_image);
php处理XML
php使用simplexml操作xml实例
header("Content-Type:text/html;charset=utf-8");
$myvar = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<nodes>
<node>
<title type="1">First</title>
<price>100</price>
</node>
<node>
<title type="2">Second</title>
<price>200</price>
</node>
</nodes>
XML;
$myxml = simplexml_load_string($myvar);
echo "父结点名称:".$myxml->getName();
echo nl2br("\n");
echo "子结点个数:".$myxml->count();
echo nl2br("\n");
foreach($myxml->children() as $node){
#print_r($node);
echo nl2br("\n");
echo "[title]->".$node->title;
echo nl2br("\n");
echo "[price]->".$node->price; //读取节点
echo nl2br("\n");
echo "[title]->type->".$node->title->attributes()->type; //读取属性
$node->title->attributes()->type = "Moments"; //修改元素
foreach($node->children() as $node_2){
if($node_2->getName() == "title"){
echo nl2br("\n");
echo "[node_2]->type->".$node_2->attributes()->type;
}
}
$myxml->asXML("myxml.xml"); //保存xml文档
}
切面编程
class A
{
protected static $name = 'A类';
static function display()
{
echo ' static::$name => '.static::$name;
echo ' self::$name => '.self::$name.PHP_EOL;
}
function getClosure()
{
return function () {
echo ' static::$name => '.static::$name;
echo ' self::$name => '.self::$name.PHP_EOL;
};
}
}
class B
{
protected static $name = 'B类';
}
class C extends A
{
protected static $name = 'C类';
}
class D extends B
{
protected static $name = 'D类';
}
$a = new A();
$b = new B();
$c = new C();
$d = new D();
// 后期静态绑定
$a::display();
$c::display();
// 由于$b没有display方法,可以使用切面注入进去
$aop = function () {
echo ' static::$name => '.static::$name;
echo ' self::$name => '.self::$name.PHP_EOL;
};
$aop->call($b);
// 将其他类的方法切入进去,这种切法只是函数封装
$aop = function ($c) {
echo ' 先执行的类 => '.static::$name;
$c->display();
};
$aop->call($b, $c);
// 把一个类的方法切到另一个类中,这种就有点意思了,被切入的类无需改动
$c->getClosure()->call($b);
// $c->getClosure()->bindTo($b, $b)(); // newscope参数传类名'B'或都实例$b,开启受保护的属性可以访问
// newscope这个作用域还可以指定为父类,所以self::$name为B类
$c->getClosure()->bindTo($d, $b)(); // newscope参数传类名'B'或都实例$b,开启受保护的属性可以访问
static::$name => A类 self::$name => A类
static::$name => C类 self::$name => A类
static::$name => B类 self::$name => B类
先执行的类 => B类 static::$name => C类 self::$name => A类
static::$name => B类 self::$name => B类
static::$name => D类 self::$name => B类