三篇文章带你极速入门php(一)之语法

本文适合阅读用户

  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(‘片尾曲,撒花完结‘);
     }
  4. array()函数会返回一个数组,如果没有参数就是一个空数组,也是创建数组的一个方式
  5. $this->actors[0][‘name‘],返回的是$this->actors的第一个成员的key为name的值
  6. 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();

原文地址:https://www.cnblogs.com/alexfly/p/10251965.html

时间: 2024-07-30 09:10:40

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

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

看下成果 ps:纯天然h5,绝不添加任何添加剂(css)以及化学成分(js)(<( ̄ ﹌  ̄)我就是喜欢纯天然,不接受任何反驳) 关于本文 用原生的php和html做了一个登陆注册,大概是可以窥见一般php开发的样子了.不过,low的地方区别提前说一下: 这个是多入口,一般程序都是单入口,单入口就是统一通过index.php进入,然后再引入其他文件,调用其代码,多入口就是每次通过不同文件进入(比如一会展示的login.php和register.php) 保留登陆信息用的是session,现在普遍

浅析RAC下SPFILE文件修改之整理三篇文章

关于RAC下spfile浅析_整理于_2014.4.17 第一篇:RAC下SPFILE文件修改 在RAC下spfile位置的修改与单节点环境不完全一致,有些地方需要特别注意,否则可能修改会失败. 下面用一个例子说明:SPFILE放在ASM中一个不正确的目录(+ARCH)中,现在想把它放在另外一个目录(+DBSYS)下. 以下是具体步骤: 1. 原spfile位置 SQL> show parameter spfile NAME TYPE VALUE ------------------------

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

背景: 上一篇:两篇文章带你走入.NET Core 世界:CentOS+Kestrel+Ngnix 虚拟机先走一遍(一) 已经交待了背景,这篇就省下背景了,这是第二篇文章了,看完就木有下篇了. 直接进入主题: 1.购买云服务器 之前在虚拟机跑了一下,感觉还不够真实,于是,准备买台服务器,认真的跑一下. 有阿里云,腾讯云,华为云,还有好多云,去哪买一个? 之前做为华为云的云享专家去参加了一下活动,本来也准备写篇文章,不过相同游记文太多, 这里就转一篇了:让华为云MVP告诉你——在华为的一天可以做什

C++ crash 堆栈信息获取(三篇文章)

最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android工程,这个时候dump文件没有了优势,那么只能在程序 creash时把内存信息打印出来,获取输出到文件中.    下面讲述下我在做堆栈信息获取时的一些经验: 文章1:在Windows下如何在程序中获得当前调用栈信息文章2:让程序在崩溃时体面的退出之Dump文件文章3:让程序在崩溃时体面的退出之Cal

第三篇文章

太阳落山,山林中光线变暗,显得很幽森,暗中有一双双眼睛盯着.血气散发,引来了一些猛兽,还好是在外围区域,没有特别可怕的凶兽. "嗷--" 一头斑纹虎虫窜来,花纹的躯体像只染了色的大蚕,能有五六米长,长着一个虎头,凶猛而狰狞,这条大虫闻到了太古真血的气味,想对狻猊的宝体咬上一口. 噗! 小不点掷出铁矛,直接没入了它的头颅中,一声惨叫,血液溅起,斑纹虎虫满地翻滚,不久后绝了性命. 无声无息,一条水桶粗的飞蟒从一座石崖上扑杀了下来,展开双翅,腥风扑鼻,快要到近前时张开血盆巨口就咬. &quo

还不知道事务消息吗?这篇文章带你全面扫盲!

在分布式系统中,为了保证数据一致性是必须使用分布式事务.分布式事务实现方式就很多种,今天主要介绍一下使用 RocketMQ 事务消息,实现分布事务. 文末有彩蛋,看完再走 为什么需要事务消息? 很多同学可能不知道事务消息是什么,没关系,举一个真实业务场景,先来带你了解一下普通的消息存在问题. 上面业务场景中,当用户支付成功,将会更新支付订单,然后发送 MQ 消息.手续费系统将会通过拉取消息,计算手续费然后保存到另外一个手续费数据库中. 由于计算手续费这个步骤可以离线计算,所以这里采用 MQ 解耦

这篇文章带你彻底理解synchronized

本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 1. synchronized简介在学习知识前,我们先来看一个现象: public class SynchronizedDemo implements Runnable { private static

一篇文章,带你明白什么是过拟合,欠拟合以及交叉验证

误差模型:过拟合,交叉验证,偏差-方差权衡 作者Natasha Latysheva;Charles Ravarani 发表于cambridgecoding 介绍 ??在本文中也许你会掌握机器学习中最核心的概念:偏差-方差权衡.其主要想法是,你想创建尽可能预测准确并且仍能适用于新数据的模型(这是泛化).危险的是,你可以轻松的在你制定的数据中创建过度拟合本地噪音的模型,这样的模型是无用的,并且导致弱泛化能力,因为噪声是随机的,故而在每个数据集中是不同的.从本质上讲,你希望创建仅捕获数据集中有用成份的

mysql第三篇文章~关于linux服务器本身的优化问题

简介:mysql服务优化分为 1服务器本身的优化 2mysql本身的性能优化 今天咱们来讨论下服务器本身的优化性能 一 参数的优化简介 1 文件系统的选择 Linux 常用文件系统: ext3, ext4, XFS, ReiserFS, JFS 其中最常用的是 ext4, XFS.非常不建议用低于ext4版本的文件系统.主流默认是ext4 2 IO调度算法 noop anticipatory deadline cfg四中算法 下面会分别介绍 1)CFQ(完全公平排队I/O调度程序) CFQ的出发