本文适合阅读用户

  1. 有其他语言基础的童鞋
  2. 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里
  3. 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本《php从入门到放弃》,观你根骨清奇10两银子卖给你如何)

看完本文后你会收获到什么

  1. php的变量的定义,使用
  2. 函数的定义,使用,传递参数
  3. 数组的定义,调用,常用方法,使用场景
  4. php中循环,判断,选择结构的语法
  5. 类的定义,成员变量和成员函数的定义和使用

相信我,认真看完本文,你就已经掌握了php常用的语法了,足以进行一些常规的开发,剩下的可以用到再学,避免在学了忘学了忘的语法坑中沉迷太久(๑•̀ㅂ•́)و✧

用php导演一场情景剧

这就是今天的目的,假设我们已经搭建好了环境(下一节会讲),现在开始进行 编码 创造世界。

首先定义一下我们的题目,myphp

//定义我们的题目
$title = "myphp";

php定义变量用$符号,php是弱类型变量语言,不区分变量的类型,""和它里边内容在一起表示一个字符串。 另外//表示注释,就是解释性的话,并不会作为代码运行

//这个方法用来输出
function show($str)
{
echo $str . "<br>";
}

再定义一个方法(也叫函数,只是叫法不一样而已啦),定义方法用function关键字,括号里的是参数,直接用变量表示就可以,在调用的时候接收调用时传来的参数

echo是php自带的输出方法,没有括号是因为它比较特殊,可以先不管,会用就行

.是php中字符串拼接的符号,<br>是html中的换行符,为了让输出更好看

//方法直接调用就好
show("hello " . $title);

输出如下图

//定义发生异常时触发的函数
function error($str)
{
echo "{$str}<br>";
exit();
}

在""双引号内,可以直接用花括号包裹起来一个变量,这样在被调用的时候变量就会直接在字符串中替换为变量的值,单引号不可以

exit()方法让整个程序结束

//用[]可以直接创建一个空的数组,然后一一赋值
$person1 = [];
$person1['name'] = '高富帅';
$person1['sex'] = '男'; //也可以直接创建一个有值的数组
$person2 = ['name' => '白富美', 'sex' => '女'];
//这是一个二维数组,也可以用同样的方式创建更多维的数组
$persons = [$person1, $person2];

既然是情景剧,得有个男女主角呀,打印出来看看这个二维数组,发现下标是从0开始的,不要奇怪所有编程语言都是这样的



接下来定义一个类,类可以暂时理解为一些数据和方法的集合,也就是我们的情景剧啦

class MyPhp
{
}

定义类用class关键字,空格后是类的名字,注意只能是英文字母或者下划线_开头

情景剧不能什么都没有啊,我们再给它定义一些必要的成员变量和成员方法

class MyPhp
{
//表示我们的演员们
public $actors = null;
//自带bgm的情景剧
public $music = '我心永恒'; public function __construct()
{
$this->start();
} public function start()
{
$time = time();
show("时间:{$time}");
$date = date('Y-m-d h:m:s', $time);
show("哦~一般人还是看日期好一点 {$date}");
show("播放片头曲~~{$this->music}");
}
}
  1. 成员变量:成员变量直接用$符号声明就可以,public private protected 是成员变量的访问控制权限(同样适用于成员方法),分别表示共有,私有,受保护的,null是php里的空指针的关键字
  2. 成员方法:
    1. 有一些自带的成员方法,比如构造函数__construct,php中__开头(两个下划线)的函数都是默认自带的函数,__construct是构造函数,初始化一个类对象的时候会调用这个方法
    2. 可以自己定义成员方法,如start这个方法,定义方法和普通方法一样,控制权限和成员变量一样也是public private protected三个
    3. 调用成员变量,如$this->music,注意此时成员变量不要加$符号。调用成员方法,如$this->start()
  3. 时间和日期:time()方法获取一个当前的时间戳,date()方法接受两个参数,第一个是一个字符串表示格式化格式,第二个参数是一个时间戳,返回格式化之后的时间
    //定义一个方法,让演员加入进来
public function actorJoin($actorlist)
{
//我们判断演员是一个数组并且有两个人才可以,否则男女主角肯定有一个人没来或者第三者插足了
if (is_array($actorlist) && count($actorlist) == 2) {
$this->actors = $actorlist;
} else {
error('还有演员没有就位');
}
}

is_array()方法判断参数变量是否是数组

count()方法返回参数数组的长度

if(){}else{}结构是条件语句语法,括号内的判断语句如果成立,程序运行if下边大括号内的内容,否则运行else下大括号的内容

    //情景剧一开始们,演员得自我介绍一下吧,流程不能省
public function introduce()
{
if (empty($this->actors)) {
error('大家好我是导演,男女主角偷偷约会还没结束,今天可能来不了了');
} foreach ($this->actors as $actor) {
$intro = "我是{$actor['name']},";
switch ($actor['sex']) {
case '女':
show($intro . "我是女主角。");
break;
case '男':
show($intro . "我是男主角。");
break;
default:
show($intro . "抱歉,我不知道我什么性别。");
break;
}
}
}
  1. empty()函数判断数组是否为空,空返回true,也就是正确的意思,此处没有else,代表如果不满足if的条件,程序直接往下走,不运行大括号内的代码。
  2. foreach循环遍历数组,foreach($arr as $val),就是说对把$arr的所有成员依次赋值给$val,循环的次数就是$arr的长度
  3. switch语句针对同一地方不同值进行选择,可以避免多次if else,性能和可读性也更好
    1. switch后跟随的括号表示选择的变量
    2. case后的值和冒号后的代码,表示对应值和要运行的代码,注意要添加break,表示跳出本次判断,不然代码会继续往下运行
    3. defaul表示没有满足以上规定的case的时候,就运行default的代码
    //表演开始啦
public function action()
{
if (empty($this->actors)) {
error('演员临时有事,谢谢大家捧场');
}
//这是我们的剧本
$play = array();
$play[] = "{$this->actors[0]['name']} 和 {$this->actors[1]['name']} 在街边相遇";
$play[] = "{$this->actors[0]['name']} 深情脉脉的看着 {$this->actors[1]['name']}";
$play[] = "以下省略一万字,请自行脑补......";
$play[] = "全剧终";
foreach ($play as $key => $val) {
show("第{$key}幕");
show($val);
}
}
//不能草草结束,补个片尾曲
public function end()
{
show('片尾曲,撒花完结');
}
  1. array()函数会返回一个数组,如果没有参数就是一个空数组,也是创建数组的一个方式
  2. $this->actors[0]['name'],返回的是$this->actors的第一个成员的key为name的值
  3. foreach循环的第二种方式,as后边如果是 $key=>$val 这种,就会把数组的键赋值给$key,值赋值给$val,比上一种多了key可以使用

    好啦,万事俱备,现在让它运行起来吧
$myphp = new MyPhp();
$myphp->actorJoin($persons);
$myphp->introduce();
$myphp->start();
$myphp->action();
$myphp->end();

new MyPhp()会创建一个MyPhp类型的类对象,让一个变量指向这个对象,就可以对这个对象的成员变量和成员方法进行调用和改动了。

看看在浏览器上的输出



改一改在命令行里让它动态跑一下看效果(怎么弄的不重要)

好啦,回顾一下文章开头的你会收获到什么,你都学会了吗?

不要急,下一节会讲搭建php环境,你就可以自己演个情景剧啦

附:全部代码

<?php
//定义变量用 $ 符号
//php是弱类型变量语言,不区分变量的类型
//字符串 被""包围的部分就是字符串
$title = "myphp"; //定义方法 用function关键字
//括号里的是参数,直接用变量表示就可以,在调用的时候接收调用时传来的参数
//.是php中字符串拼接的符号
function show($str)
{
echo $str . "<br>";
} //方法直接调用就好
show("hello " . $title);
//exit()方法让整个程序结束
//在""双引号内,可以直接用花括号包裹起来一个变量,这样在被调用的时候变量就会直接在字符串中替换为变量的值,单引号不可以哦
function error($str)
{
echo "{$str}<br>";
exit();
} //用[]可以直接创建一个空的数组,然后一一赋值
$person1 = [];
$person1['name'] = '高富帅';
$person1['sex'] = '男'; //也可以直接创建一个有值的数组
$person2 = ['name' => '白富美', 'sex' => '女'];
//这是一个二维数组,也可以用同样的方式创建更多维的数组
$persons = [$person1, $person2]; //定义类用class关键字
class MyPhp
{
//成员变量直接用$符号声明就可以
//public private protected 是成员变量的访问控制权限
//null是php里的空指针的关键字
public $actors = null;
public $music = '我心永恒'; //php中__开头(两个下划线)的函数都是默认自带的函数
//__construct是构造函数,初始化一个类对象的时候会调用这个方法
public function __construct()
{
$this->start();
} public function start()
{
//time()方法获取一个当前的时间戳
//date()方法接受两个参数,第一个是一个字符串表示格式化格式,第二个参数是一个时间戳,返回格式化之后的时间
$time = time();
show("时间:{$time}");
$date = date('Y-m-d h:m:s', $time);
show("哦~一般人还是看日期好一点 {$date}");
//$this->music 调用成员变量,注意此时成员变量不要加$符号
show("播放片头曲~~{$this->music}");
} //演员加入
public function actorJoin($actorlist)
{
//is_array()方法判断参数变量是否是数组
//count()方法返回参数数组的长度
//if(){}else{}是条件语句语法,括号内的判断语句如果成立,程序运行if下边大括号内的内容,否则运行else下大括号的内容
if (is_array($actorlist) && count($actorlist) == 2) {
$this->actors = $actorlist;
} else {
error('还有演员没有就位');
}
} public function introduce()
{
//empty()函数判断数组是否为空,空返回true,也就是正确的意思
//此处没有else,代表如果不满足if的条件,程序直接往下走,不运行大括号内的代码。
if (empty($this->actors)) {
error('大家好我是导演,男女主角偷偷约会还没结束,今天可能来不了了');
}
//foreach循环遍历数组,foreach($arr as $val),就是说对把$arr的所有成员依次赋值给$val,循环的次数就是$arr的长度
foreach ($this->actors as $actor) {
$intro = "我是{$actor['name']},";
//switch语句针对同一地方不同值进行选择,可以避免多次if else,性能和可读性也更好
//switch后跟随的括号表示选择的变量,case后的值和冒号后的代码,表示对应值和要运行的代码,注意要添加break,表示跳出本次判断,不然代码会急需往下运行
//defaul表示没有满足以上规定的case的时候,就运行default的代码
switch ($actor['sex']) {
case '女':
show($intro . "我是女主角。");
break;
case '男':
show($intro . "我是男主角。");
break;
default:
show($intro . "抱歉,我不知道我什么性别。");
break;
}
}
} public function action()
{
if (empty($this->actors)) {
error('演员临时有事,谢谢大家捧场');
}
//array()函数会返回一个数组,如果没有参数就是一个空数组,也是创建数组的一个方式
//$this->actors[0]['name'] 返回的是$this->actors的第一个成员的name
$play = array();
$play[] = "{$this->actors[0]['name']} 和 {$this->actors[1]['name']} 在街边相遇";
$play[] = "{$this->actors[0]['name']} 深情脉脉的看着 {$this->actors[1]['name']}";
$play[] = "以下省略一万字,请自行脑补......";
$play[] = "全剧终";
//foreach循环的第二种方式,as后边如果是 $key=>$val 这种,就会把数组的键赋值给$key,值赋值给$val,比上一种多了key可以使用
foreach ($play as $key => $val) {
show("第{$key}幕");
show($val);
}
} public function end()
{
show('片尾曲,撒花完结');
} } $myphp = new MyPhp();
$myphp->actorJoin($persons);
$myphp->introduce();
$myphp->start();
$myphp->action();
$myphp->end();

三篇文章带你极速入门php(一)之语法的更多相关文章

  1. 三篇文章带你极速入门php(三)之php原生实现登陆注册

    看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥 ...

  2. 三篇文章带你极速入门php(二)之迅速搭建php环境

    前言 今天讲一下php在windows,mac,linux上的集成环境搭建,目标是简单快速,环境这个事得对号入座,windows用phpstudy,mac用mamp,linux用lnmp一键安装,直接 ...

  3. 三篇文章了解 TiDB 技术内幕 —— 谈调度

    任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都 ...

  4. 三篇文章了解 TiDB 技术内幕 - 说存储(转)

    引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的支撑.这一领域经过了几十年的发展,不断的有新的进展. 很多人用过数据库,但是很少有人实现 ...

  5. jq最新前三篇文章高亮显示

    /*---------最新前三篇文章高亮显示-------------*/ function latest(){ var color_arr=new Array( "blue", ...

  6. 两篇文章带你走入.NET Core 世界:Kestrel+Nginx+Supervisor 部署上云服务器(二)

    背景: 上一篇:两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一) 已经交待了背景,这篇就省下背景了,这是第二篇文章了,看完就木有下篇了. 直接进 ...

  7. 三篇文章了解 TiDB 技术内幕——说计算

    在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE ...

  8. TIDB4 —— 三篇文章了解 TiDB 技术内幕 - 谈调度

    原文地址:https://pingcap.com/blog-cn/tidb-internal-3/ 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 K ...

  9. 两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一)

    背景: 上一篇:ASP.Net Core on Linux (CentOS7)共享第三方依赖库部署 已经交待了背景,这篇就省下背景了. 折腾的过程分两步: 第一步是:本机跑虚拟机部署试一下: 第二步是 ...

随机推荐

  1. iOS视频流开发(1)—视频基本概念

    iOS视频流开发(1)-视频基本概念 手机比PC的优势除了便携外,她最重要特点就是可以快速方便的创作多媒体作品.照片分享,语音输入,视频录制,地理位置.一个成功的手机APP从产品形态上都有这其中的一项 ...

  2. FarBox--另类有趣的网站服务【转】

    FarBox--另类有趣的网站服务 转自:http://mosir.org/html/y2012/the-interesting-web-service-serve-by-FarBox.html 作者 ...

  3. phantomjs 下拉滚动条获取网页的全部源码

    //codes.js var system = require('system'); var fs = require("fs"); //console.log('Loading ...

  4. 【SVN技巧】如何协同开发LabVIEW代码 1

    前言 在我们工作中,必然会遇到代码的多个版本问题,也必然会遇到版本控制问题.如果所在的公司具有良好的项目管理体系或者软件管理体系,那么其版本控制应该有严格的使用规范,如果没有则作为一个上进好青年也应当 ...

  5. Java基础95 过滤器 Filter

    1.filter 过滤器的概述 filter过滤器:是面向切面编程的一种实现策略,在不影响原来的程序流程的前提下,将一些业务逻辑切入流程中,在请求达到目标之前进行处理,一般用于编码过滤.权限过滤... ...

  6. Oracle 数据库逻辑结构

    注:本文来源于 <腾科OCP培训课堂>.非准许商业活动. Oracle 数据库逻辑结构 一.存储关系 Oracle 数据库逻辑上是由一个或多个表空间组成的,表空间物理上是由一个或多个数据 ...

  7. Ngnix日志分析

    Ngnix日志分析 cat用来读取日志内容 grep进行匹配的文本搜索 wc则进行最终的统计 grep与命令格式: grep -E “a.*b” file,ab条件同时成立 grep或命令的格式为:g ...

  8. 扩展欧几里得,解线性同余方程 逆元 poj1845

    定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b) int exgcd(int a,int b,int &x,int &y){ ){x=,y=;return ...

  9. hdu3397区间覆盖,区间翻转,区间合并,区间求和

    调了很久的代码..注意区间翻转和覆盖的操作互相的影响 /* 区间替换操作怎么搞? 应该是加个tag标记 如果整个区间都是0|1,那么把若有tag的话直接set1|0即可,也不用设置tag标记 反之要设 ...

  10. python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)

    一.hashlib文件一致性校验 为何要进行文件一致性校验? 为了确保你得到的文件是正确的版本,而没有被注入病毒和木马程序.例如我们经常在网上下载软件,而这些软件已经被注入了一些广告和病毒等,如果不进 ...