测试环境
- phpstorm9
- xampp5.6.14
- linux-xx
变量、常变量、函数、分支和循环
<?php
//当只是php代码的时候,<?php末尾标识符省略,若包含html代码,则需将php末尾标识符加上
//变量
$a = 10;
$b = 15.000000000001;//精确到E-12
echo $a + $b ."<br/>";
//常量
const CONST_VALUE1 = 11; //php5
define("CONST_VALUE2", 12); //php4
echo CONST_VALUE1 ."</br>";
echo CONST_VALUE2 ."</br>";
//函数(一)
function sayHello() {
echo "hello!"."<br/>";
}
//调用函数
sayHello();
//函数(二) //回调 //函数可作为参数进行传递
$func = "sayHello";
$func();
$aaa = function() {
echo "hello 呵呵呵!";
};
$aaa();
//函数(三) //含参函数
function sayName($name) {
echo "hello ". $name . "!<br/>";
}
sayName("张三");
sayName("李四");
//函数(四) //多个参数
function add($a, $b) {
echo "a=$a, b=$b<br/>"; //a=1, b=2
echo "a+b=($a+$b)<br/>"; //a+b=(1+2)
echo "a+b=".($a+$b)."<br/>"; //a+b=3
}
add(1,2);
//函数(五) //返回值
function getNum($num) {
return $num;
}
echo getNum(2)."<br/>"; //2
//分支 if switch
function getLevelByIf($score) {
if ($score>100 || $score<0) {
return "<span style='color:red;'>illegal!</span>";
} else if ($score>90) {
return "excellent";
} else if ($score>80) {
return "good";
} else {
return "bad";
}
}
echo getLevelByIf(101)."<br/>";
function getLevelBySwitch($score) {
switch((intval($score/10))) { //intval是php整数函数
case 10:
case 9:
return "excellent"; //
case 8:
return "good";
case 7:
case 6:
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
return "bad";
default:
return "<span style='color:red;'>illegal!</span>";
}
}
echo getLevelBySwitch(91)."<br/>";
//循环 for while
function getSumByFor($start, $end) {
$sum = 0;
for($i=$start; $i<=$end; $i++) {
$sum += $i; //可以 break或continue
}
return $sum;
}
echo getSumByFor(1,100) . "<br/>";
function getSumByWhile($start, $end) {
$sum = 0;
$i = $start;
while ($i<=$end) {
$sum += $i;
$i++;
}
return $sum;
}
echo getSumByWhile(1,100) . "<br/>";
function getSumByDoWhile($start, $end) {
$sum = 0;
$i = $start;
do {
$sum += $i;
$i++;
} while ($i<=$end);
return $sum;
}
echo getSumByDoWhile(1,100) . "<br/>";
?>
字符串和数组(String&Array)
<?php
/*字符串的使用*/
//位置
$str = 'Hello PHP!';
echo strpos($str,'PH').'<br/>'; //6
//子串
echo substr($str, 2, 3).'<br/>'; //llo 从2位置,长度为3
echo substr($str, 2).'<br/>'; //llo PHP! 从2位置,到结尾
//等分割
$result = str_split($str);
print_r($result); //打印数组 Array ( [0] => H [1] => e [2] => l [3] => l [4] => o [5] => [6] => P [7] => H [8] => P [9] => ! )
echo '<br/>';
$result = str_split($str, 3);
print_r($result); //Array ( [0] => Hel [1] => lo [2] => PHP [3] => ! )
echo '<br/>';
//不等分割
$result = explode(' ', $str);
print_r($result); //Array ( [0] => Hello [1] => PHP! )
echo '<br/>';
//连接
$str = '窗前明月光'.'<br/>'.'疑是地上霜'.'<br/>';
echo $str.'<br/>';
$str = "$str 举头望明月<br/>低头思故乡<br/>";
echo $str;
?>
<?php
//基本
$array = array(); //array可以存放所有类型的数据
$array[0] = "hello";
$array[1] = "world";
$array[2] = 2;
$array[3] = 3.14;
print_r($array); //Array ( [0] => hello [1] => world [2] => 2 [3] => 3.14 )
echo "<hr/>";
//初始化
$array = array('a'=>'hehe', 'b'=>'haha');
print_r($array); //Array ( [a] => hehe [b] => haha )
echo "<hr/>";
//push
for($i=0; $i<5; $i++) {
array_push($array, "item_$i");
}
print_r($array); //Array ( [a] => hehe [b] => haha [0] => item_0 [1] => item_1 [2] => item_2 [3] => item_3 [4] => item_4 )
echo "<hr/>";
//以key-value形式存放数据
$array['a'] = "aaaa";
$array['a'] = "aaaaaaaaa";
$array['b'] = "bbbb";
echo $array['a']."<br/>"; //aaaaaaaaa
echo $array['b']."<br/>"; //bbbb
echo "<hr/>";
//遍历
foreach($array as $key=>$value) {
echo "$key=$value<br/>";
}
echo "<hr/>";
?>
时间、日期、数组、JSON
<?php
//时间戳
echo time() ."<br/>";
//时区
echo date_default_timezone_get() ."<br/>"; //默认为Europe/Berlin
//日期
date_default_timezone_set("Asia/Shanghai"); //改时区为上海时间 [参考]http://php.net/manual/en/timezones.asia.php
echo date('Y-m-d H:i:s') . "<br/>"; //F2为文档提示键 2015-11-20 15:11:59
//时间戳和日期的互转
$date = date('Y-m-d H:i:s', 1448003519);
echo $date . "<br/>"; //2015-11-20 15:11:59
echo strtotime($date) ."<br/>"; //1448003519
//数组转json
$array = array(1,2,5,8,0, "hello", "zhangsan", array("lover"=>"xiaojuan", "lover_age"=>23));
$obj = array("lover"=>"xiaojuan", "lover_age"=>23);
echo json_encode($array) ."<br/>"; //[1,2,5,8,0,"hello","zhangsan",{"lover":"xiaojuan","lover_age":23}]
echo json_encode($obj) ."<br/>"; //{"lover":"xiaojuan","lover_age":23}
//json转数组
$jsonStr = '{"lover":"xiaojuan","lover_age":23}';
$obj = json_decode($jsonStr);
echo $obj->lover ." " .$obj->lover_age ."<br/>";
?>
include&require
<?php
/*
* 在一个php文件中引入另一个php文件有如下四种方式:
* 1.include xxx.php 包含(包含一次,被包含文件的代码执行一次,[注]若文件被包含两次以上,则可能导致被包含文件的函数重复定义)
* 2.include_once xxx.php 包含一次(被包含文件的代码只执行第一次,不会造成函数的重复定义)
* 3.require xxx.php 依赖(与include的区别是错误提示级别不同,即:若被包含或依赖的文件找不到或出错,则require会报错,程序终止,而include则只是警告,程序继续执行)
* 4.require_once xxx.php 依赖一次
*/
include "include-require-lib.php";
sayHello();
include_once "include-require-lib.php"; //
//include-require-lib.php
<?php
echo "----include-require-lib.php----<br/>";
function sayHello() {
echo "hello world!<br/>";
}
/**
* 运行结果:
* ----include-require-lib.php----
* hello world!
*/
?>
类的命名空间、属性、方法(静态xx、成员xx、常量、构造方法…)
//index.php
<?php
require_once "namespace01/Student.php";
require_once "namespace02/Student.php";
$student = new \namespace01\Student();
$student->setName("张三");
$student->setAge(23);
echo $student->__toString();
new \namespace01\Student();
//new \namespace01\Student(); //抛出异常,程序终止!
echo "<hr/>";
$student = new \namespace02\Student("小娟", 22);
echo $student->__toString();
echo "<hr/>";
?>
//namespace01/Student.php
<?php
/**
* Created by PhpStorm.
* User: kignglyjn
* Date: 2015/11/3
* Time: 22:05
*/
namespace namespace01;
class Student {
//成员属性
private $name, $age;
//静态属性
public static $NUM = 0;
//常量
const MAX_STUDENT_NUM = 2;
/*============================构造方法====================================*/
public function __construct() {
if (Student::$NUM >= Student::MAX_STUDENT_NUM) {
throw new \Exception("不能创建2个以上的学生!!!");
}
echo "<span style='color:red;'>The constructor of namespace01's Student</span><br/>";
Student::$NUM++;
}
/*public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}*/
/*=============================静态方法===================================*/
public static function study() {
echo "study...<br/>";
}
/*=============================成员方法===================================*/
/**
* @return mixed
*/
public function getName() {
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name) {
$this->name = $name;
}
/**
* @return mixed
*/
public function getAge() {
return $this->age;
}
/**
* @param mixed $age
*/
public function setAge($age) {
$this->age = $age;
}
function __toString() {
return "name=$this->name age=$this->age<br/>";
}
public function sayHello() {
echo "hello namespace01!<br/>";
}
}
?>
//namespace02/Student.php
<?php
namespace namespace02;
class Student {
//属性
private $name, $age;
/**
* @param $name 姓名
* @param $age 年龄
*/
public function __construct($name, $age)
{
echo "<span style='color:red;'>The constructor of namespace02's Student</span><br/>";
$this->name = $name;
$this->age = $age;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getAge()
{
return $this->age;
}
/**
* @param mixed $age
*/
public function setAge($age)
{
$this->age = $age;
}
function __toString()
{
return "name=$this->name age=$this->age<br/>";
}
public function sayHello()
{
echo "hello namespace02!<br/>";
}
}
?>
运行结果:
类的继承与方法重写
//index.php
<?php
require_once "namespace01\Student.php";
$student = new \namespace01\Student("xx小学");
echo $student->__toString();
echo "<hr/>";
$student->sayHello();
echo "<hr/>";
?>
//namespace01/Person.php
<?php
namespace namespace01;
class Person {
private $name, $age, $sex;
/**
* Person constructor.
* @param $name
* @param $age
* @param $sex
*/
public function __construct($name, $age, $sex)
{
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getAge()
{
return $this->age;
}
/**
* @param mixed $age
*/
public function setAge($age)
{
$this->age = $age;
}
/**
* @return mixed
*/
public function getSex()
{
return $this->sex;
}
/**
* @param mixed $sex
*/
public function setSex($sex)
{
$this->sex = $sex;
}
function __toString()
{
return "$this->name $this->age $this->sex";
}
function sayHello() {
echo "hello person!<br/>";
}
}
?>
//namespace01/Sudent.php
<?php
namespace namespace01;
require_once "namespace01\Person.php";
class Student extends Person {
private $school;
/**
* Student constructor.
* @param $school
*/
public function __construct($school)
{
parent::__construct("张三", 23, "男");
$this->school = $school;
}
/**
* @return mixed
*/
public function getSchool()
{
return $this->school;
}
/**
* @param mixed $school
*/
public function setSchool($school)
{
$this->school = $school;
}
/*============================方法重写====================================*/
function __toString()
{
return parent::__toString()." ".$this->school; // TODO: Change the autogenerated stub
}
function sayHello()
{
echo "hello student!"; // TODO: Change the autogenerated stub
}
}
?>
运行结果:
文件的读写
<?php
//w
$f = @fopen("data.txt", "w"); //@符号 表示忽略警告
if($f) {
//default codeStyle is current file's //如果出现权限问题,chmod 777 tools //更改tools目录的权限
fwrite($f, "床前明月光!\n疑是地上霜!");
fclose($f);
echo "write ok!<br/>";
} else {
echo "创建文件失败!<br/>";
}
//r
$f = @fopen("data.txt", "r");
while (!feof($f)) {
$content = fgets($f); //read a line
echo $content ."<br/>";
}
fclose($f);
//get content
echo file_get_contents("data.txt"); //床前明月光! 疑是地上霜!
?>
图片及图片文件的操作
画一张图片
<?php
$img = imagecreate(400, 300);
imagecolorallocate($img, 255, 255, 255); //background-color
imageellipse($img, 200, 200, 50, 50, imagecolorallocate($img, 255, 0, 0)); //draw an red ellipse
header("Content-type: image/png"); //set Content-type
imagepng($img);
?>
运行结果:
给图片设置水印
<?php
$img = imagecreatefrompng("005.png");
header("Content-type: image/png");
imagestring($img, 5, 20, 20, "this is a water mark! --kinglyjn", imagecolorallocate($img, 255, 0, 0));
imagepng($img);
?>
运行结果: