学习和在工作中使用PHP已经有几个年头。但是由于个人的某些原因,从未对自身的知识进行过整理和梳理。出于某些触动,我竟也萌生了写博客的想法。说干就干,希望能坚持下去。
编程的第一课,几乎都由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,哪么这些方式分别有哪些区别呢?
方法 | 说明 |
---|---|
echo | echo 不是一个函数(它是一个语言结构), 因此你不一定要使用小括号来指明参数,单引号,双引号都可以。 另外,如果你想给echo 传递多个参数, 那么就不能使用小括号。而且输出所有参数。不会换行。 特别说明一点,echo是没有返回值的,print有,而且返回值总是1。 |
print 实际上不是函数(而是语言结构),所以可以不用圆括号包围参数列表。 但是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 级别的致命错误。 |
//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
//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
//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 ''
;
print_r($obj);
//输出内容如下,请说出每个节点内容的含义,哈哈哈哈,哪个是访问修饰符,哪个是类的属性?
printTest Object
(
[private:printTest:private] =>
[protected:protected] =>
[public] =>
)
//1.var_dump与print_r类似,只是var_dump可以接受很多的参数,且没有返回值。既是没有将第二个参数设置为true的操作
var_dump(2, true, 'string');//输出内容更详细,包含类型,长度(字符串),值
//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
//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的方法了。你问这有什么用?那你知道茴香豆的“茴”字有几种写法吗?