一切从输出Hello World开始

本文从写博客的初衷出发,介绍了编程学习中常见的起点——输出Hello World。文章详细对比了PHP中echo、print、print_r、var_dump、var_export以及die、exit等方法的使用和区别,帮助读者掌握不同输出方式的特点。
摘要由CSDN通过智能技术生成

初衷

  学习和在工作中使用PHP已经有几个年头。但是由于个人的某些原因,从未对自身的知识进行过整理和梳理。出于某些触动,我竟也萌生了写博客的想法。说干就干,希望能坚持下去。

新的改变

  编程的第一课,几乎都由helloWorld开始,写博客也不例外:

各种helloWorld

echo 'Hello World';

var_dump('Hello World');

print('Hello World');

print_r('Hello World');

exit('Hello World');

die('Hello World');

var_export('Hello World');

class helloWorld
{
	public function __construct()
	{
	}

    public function __toString()
    {
		return __CLASS__;
	}
}
echo (new helloWorld());

区别

  上面使用了几种方式来输出Hello World,哪么这些方式分别有哪些区别呢?

含义说明

方法说明
echoecho 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以。
另外,如果你想给echo 传递多个参数, 那么就不能使用小括号。而且输出所有参数。不会换行。
特别说明一点,echo是没有返回值的,print有,而且返回值总是1。
printprint 实际上不是函数(而是语言结构),所以可以不用圆括号包围参数列表。
但是print有返回值,而且返回值总是1。
print_r以人类易读的格式显示一个变量的信息。
这是一个函数,且有两个参数。
虽然我们可能平时更多的是用它来输出内容,但是它其实是可以不输出内容的。
当第二个参数赋值为true的时候,它仅将输出的内容返回。
var_dump打印变量的相关信息。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。
数组将递归展开值,通过缩进显示其结构。
var_dump与xdebug更配哦。如果想修改var_dump的显示层级,请设置
xdebug.var_display_max_children=128;
xdebug.var_display_max_data=512;
xdebug.var_display_max_depth=5;
var_dump是可以接收多个参数的。
var_export输出或返回一个变量的字符串表示。
有两个参数,第二个参数不设置或者设置的值等于被转换后的false的话,将直接输出内容。
die语法结构等同于exit。
exit输出一个消息并且退出当前脚本。
中止脚本的执行。
尽管调用了 exit(), Shutdown函数 以及 object destructors 总是会被执行。
exit 是个语法结构,如果没有 status 参数要传入,可以省略圆括号。
如果 status 是一个字符串,在退出之前该函数会打印 status 。
如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。
退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。
状态码0用于成功中止程序。
__toString类的toString魔术方法。
__toString() 方法用于一个类被当成字符串时应怎样回应。
例如 echo $obj; 应该显示些什么。
此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

代码描述

echo举例

//1.echo是一个语法结构,没有返回值
$return = echo 0;//此句语法错误,不信可以试试

//2.echo可以接受多个参数,逗号隔开
echo 0, 1, 3;//输出013

//3.echo只有一个参数加括号
echo (2);//输出2

//4.echo 接收多个参数不能加括号
echo (2, 3);//语法错误,不信依然可以试试

//5.echo如果输出bool类型变量会是神马情况?
echo true;//输出1,意料之中
echo false;//没看到任何输出,WTF???
echo 0;//输出0

//6.echo执行优先级,面试题
function myEcho()
{
    echo "myEcho";
}
echo "This is " . myEcho();
//输出内容为?答案:myEchoThis is

function myEcho()
{
    echo "myEcho";
}
echo "This is " , myEcho();
//输出内容为?答案:This is myEcho

print举例

//1.print的返回值

$return = print(2);//输出2
var_dump($return);//输出1

//2.print不要括号测试
print 2333;//输出2333

//3.print能否接收多个参数?
print(2, 3);//语法错误

//4.print如果输出bool会如何?
print true;//输出1,意料之中
print false;//没看到任何输出,已经有心理准备了
print 0;//输出0

print_r举例

//1.print_r输出数字与bool类型
print_r(0);//输出0
print_r(true);//输出1
print_r(false);//啥都没,你懂得

//2.print_r不直接输出
$return = print_r(0, true);//不输出,返回字符串0
var_dump($return);

//3.print_r输出类的实例
/**
 * print_r()、 var_dump()、 var_export() 都会显示对象 protected 和 private 的属性。 Class 的静态属性(static) 则不会显示。
 */
 class printTest
{
    private $private;

    protected $protected;

    public $public;

    private static $sPrivate;

    protected static $sProtected;

    public static $sPublic;

    public function __construct()
    {
    }

    private function setPrivate($private)
    {
        $this->private = $private;
    }

    protected function setProtected($protected)
    {
        $this->protected = $protected;
    }

    public function setPublic($public)
    {
        $this->public = $public;
    }

    private static function setStaticPrivate($private)
    {
        self::$sPrivate = $private;
    }

    protected static function setStaticProtected($protected)
    {
        self::$sProtected = $protected;
    }

    public static function setStaticPublic($public)
    {
        self::$sPublic = $public;
    }
}

$obj = new printTest();
echo '<pre>';
print_r($obj);

//输出内容如下,请说出每个节点内容的含义,哈哈哈哈,哪个是访问修饰符,哪个是类的属性?
printTest Object
(
    [private:printTest:private] => 
    [protected:protected] => 
    [public] => 
)

var_dump举例

//1.var_dump与print_r类似,只是var_dump可以接受很多的参数,且没有返回值。既是没有将第二个参数设置为true的操作
var_dump(2, true, 'string');//输出内容更详细,包含类型,长度(字符串),值

var_export举例

//1.var_export不输出
$arr = [2, 3, 4];
$str = var_export($arr, true);
var_dump($str);

//var_export不输出内容
//var_dump输出内容
array (
  0 => 2,
  1 => 3,
  2 => 4,
)

//2.var_export输出
$arr = [2, 3, 4];
$str = var_export($arr);
var_dump($str);

//var_export输出内容
array (
  0 => 2,
  1 => 3,
  2 => 4,
)
//var_dump输出内容null

die、exit举例

//1.die、exit不传参
die;
exit;

//2.传入字符串
die("exit");//程序退出,输出exit,exit("die");同理

//3.传入数字
die(1);//无输出,exit(1)同理

//4.shutdown函数与析构函数执行
register_shutdown_function('shutdown');
function shutdown()
{
    echo __FUNCTION__ . "is called" . PHP_EOL;
}

class shutdown
{
    private $info = null;

    public function __construct()
    {
        $this->info = new stdClass();
    }

    public function __destruct()
    {
        $this->info = null;
        echo __METHOD__ . "is called" . PHP_EOL;
    }
}
new shutdown();
exit;

//输出内容

shutdown::__destructis called
shutdownis called

总结

  以上就是我所了解打印的Hello World的方法和他们对应的区别。相信你看了这篇文章之后就已经精通各种输出Hello World的方法了。你问这有什么用?那你知道茴香豆的“茴”字有几种写法吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值