Geo*_*uer 174 php hidden-features
我知道这听起来像是一个让人尴尬的问题,但让我解释一下我来自哪里.
大学毕业后,我在PHP商店找到了一份工作.我在那里工作了一年半,并且认为我已经学到了所有有关编程的知识.
然后我在一家规模庞大的公司找到了一份单人内部开发工作室,所有工作都在C#中.在我对这个职位的承诺中,我开始阅读大量的博客和书籍,并很快意识到我认为我知道一切都是错的.我学习了单元测试,依赖注入和装饰模式,松散耦合的设计原则,继承辩论的组合等等 - 我仍然非常吸收它.毋庸置疑,我的编程风格在去年完全改变了.
现在我发现自己正在为一个朋友的初创公司做一些编码的PHP项目,我觉得完全受限制而不是用C#编程.让我感到困扰的是,必须通过追加'$ this->'来引用类范围内的所有变量.令我很生气的是,我尝试过的IDE中没有一个具有非常好的智能感知,而且我的SimpleTest单元测试方法必须从"测试"一词开始.令我疯狂的是,动态类型使我无法隐式指定方法所期望的参数类型,并且必须编写switch语句来执行方法重载.我不能忍受你不能拥有嵌套的命名空间,并且必须使用::运算符来调用基类的构造函数.
现在我无意启动PHP与C#的争论,而我的意思是说我确定有些PHP功能我不知道或者知道但是没有正确使用.我被置于我的C#宇宙中,无法看到玻璃碗外面.
所以我问,你最喜欢的PHP功能是什么?你可以做些什么,你不能或在.Net语言中更难?
use*_*134 179
数组.从这个问题的答案来看,我不认为人们完全理解PHP中的数组是多么简单和有用.PHP数组同时充当列表,映射,堆栈和通用数据结构.数组在语言核心中实现,并在整个地方使用,从而产生良好的CPU缓存局部性.Perl和Python都对列表和映射使用单独的语言结构,导致更多的复制和可能令人困惑的转换.
All*_*nde 167
流处理程序允许您使用逻辑扩展"FileSystem",据我所知,在大多数其他语言中很难做到这一点.
例如,使用MS-Excel Stream处理程序,您可以通过以下方式创建MS Excel文件:
$fp = fopen("xlsfile://tmp/test.xls", "wb");
if (!is_resource($fp)) {
die("Cannot open excel file");
}
$data= array(
array("Name" => "Bob Loblaw", "Age" => 50),
array("Name" => "Popo Jijo", "Age" => 75),
array("Name" => "Tiny Tim", "Age" => 90)
);
fwrite($fp, serialize($data));
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
All*_*nde 131
Magic Methods是一种直通方法,只要您调用不存在的方法或分配或读取不存在的属性,就会调用它们.
interface AllMagicMethods {
// accessing undefined or invisible (e.g. private) properties
public function __get($fieldName);
public function __set($fieldName, $value);
public function __isset($fieldName);
public function __unset($fieldName);
// calling undefined or invisible (e.g. private) methods
public function __call($funcName, $args);
public static function __callStatic($funcName, $args); // as of PHP 5.3
// on serialize() / unserialize()
public function __sleep();
public function __wakeup();
// conversion to string (e.g. with (string) $obj, echo $obj, strlen($obj), ...)
public function __toString();
// calling the object like a function (e.g. $obj($arg, $arg2))
public function __invoke($arguments, $...);
// called on var_export()
public static function __set_state($array);
}
Run Code Online (Sandbox Code Playgroud)
这里的C++开发人员可能会注意到,PHP允许重载某些运算符,例如()
或(string)
.实际上PHP允许重载甚至更多,例如[]
运算符(ArrayAccess),foreach
语言构造(Iterator和IteratorAggregate)和count
函数(Countable).
Dea*_*her 95
该标准类是一个整洁的容器.我最近才了解它.
而不是使用数组来保存多个属性
$person = array();
$person['name'] = 'bob';
$person['age'] = 5;
Run Code Online (Sandbox Code Playgroud)
您可以使用标准类
$person = new stdClass();
$person->name = 'bob';
$person->age = 5;
Run Code Online (Sandbox Code Playgroud)
在字符串中访问这些变量时,这尤其有用
$string = $person['name'] . ' is ' . $person['age'] . ' years old.';
// vs
$string = "$person->name is $person->age years old.";
Run Code Online (Sandbox Code Playgroud)
Phi*_*ber 90
包含文件可以具有可以分配给变量的返回值.
// config.php
return array(
'db' => array(
'host' => 'example.org',
'user' => 'usr',
// ...
),
// ...
);
// index.php
$config = include 'config.php';
echo $config['db']['host']; // example.org
Run Code Online (Sandbox Code Playgroud)
Mic*_*icz 83
您可以利用or
运算符优先级低于=
执行此操作的事实:
$page = (int) @$_GET['page']
or $page = 1;
Run Code Online (Sandbox Code Playgroud)
如果第一个赋值的值的计算结果为true
,则忽略第二个赋值.另一个例子:
$record = get_record($id)
or throw new Exception("...");
Run Code Online (Sandbox Code Playgroud)
Wil*_*lem 80
__autoload()
(类)文件辅助set_include_path()
.
在PHP5中,现在不需要在执行合适的OOP时指定"include_once"语句的长列表.
只需定义一小组目录,其中类库文件结构合理,并设置自动包含路径:
set_include_path(get_include_path() . PATH_SEPARATOR . '../libs/');`
Run Code Online (Sandbox Code Playgroud)
现在__autoload()
例程:
function __autoload($classname) {
// every class is stored in a file "libs/classname.class.php"
// note: temporary alter error_reporting to prevent WARNINGS
// Do not suppress errors with a @ - syntax errors will fail silently!
include_once($classname . '.class.php');
}
Run Code Online (Sandbox Code Playgroud)
现在,PHP将按需自动包含所需的文件,从而节省解析时间和内存.
Jrg*_*gns 76
变量和函数毫无疑问!
$foo = 'bar';
$bar = 'foobar';
echo $$foo; //This outputs foobar
function bar() {
echo 'Hello world!';
}
function foobar() {
echo 'What a wonderful world!';
}
$foo(); //This outputs Hello world!
$$foo(); //This outputs What a wonderful world!
Run Code Online (Sandbox Code Playgroud)
相同的概念适用于对象参数($ some_object - > $ some_variable);
非常非常棒.使用循环和模式进行编码非常简单,并且它比eval更快,更易于控制(Thanx @Ross和@Joshi Spawnbrood!).
Chr*_*our 76
容易.最大的特点是新开发人员坐下来编写"工作"脚本并理解代码是多么容易.
最糟糕的特性是新开发人员坐下来编写"工作"脚本并认为他们理解代码是多么容易.
围绕PHP 的社区的开放性和作为开源的大量PHP项目对于进入开发领域的人来说并不像你一样令人生畏,可以成为更成熟语言的踏脚石.
我不会在我之前讨论技术问题,但如果你把PHP视为一个社区而不是一个网络语言,一个在你开始开发时明显拥抱你的社区,那么这些好处确实可以说明问题.
The*_*ain 68
您可以使用功能与参数的不确定数量的使用func_get_args()
.
<?php
function test() {
$args = func_get_args();
echo $args[2]; // will print 'd'
echo $args[1]; // will print 3
}
test(1,3,'d',4);
?>
Run Code Online (Sandbox Code Playgroud)
zom*_*bat 67
我喜欢远程文件.对于Web开发,此类功能非常有用.
需要使用网页的内容?一个简单的
$fp = fopen('http://example.com');
Run Code Online (Sandbox Code Playgroud)
并且你已经准备好了文件句柄,就像任何其他普通文件一样.
或者如何直接读取字符串中的远程文件或网页?
$str = file_get_contents('http://example.com/file');
Run Code Online (Sandbox Code Playgroud)
这种特殊方法的用处很难夸大.
想分析远程图像?怎么样通过FTP做到这一点?
$imageInfo = getimagesize('ftp://user:password@ftp.example.com/image/name.jpg');
Run Code Online (Sandbox Code Playgroud)
几乎所有使用文件的PHP函数都可以使用远程文件.你甚至可以include()
和require()
代码远程文件这种方式.
tho*_*ter 63
它非常快,你会感到惊讶.在内部,它可能使用一些疯狂的b树类型结构来按照它们的公共前缀排列匹配.我使用超过200个查找和替换字符串,它仍然在不到100毫秒内通过1MB.除了琐碎的小字符串之外,strtr()在执行完全相同的操作时甚至比strtolower()明显更快,甚至考虑到字符集.您可以使用连续的strtr调用编写一个完整的解析器,它比通常的正则表达式匹配更快,找出令牌类型,输出这个或那个,下一个正则表达式的东西.
我正在编写一个文本规范化器,用于将文本分成单词,小写,删除标点符号等,而strtr是我的瑞士军刀,它可以通过正则表达式甚至str_replace()击败裤子.
Arm*_*her 61
PHP的一个不太知名的特性是extract()
,一个将关联数组解包到本地命名空间的函数.这可能存在于自动全球污染中,但对模板非常有用:
function render_template($template_name, $context, $as_string=false)
{
extract($context);
if ($as_string)
ob_start();
include TEMPLATE_DIR . '/' . $template_name;
if ($as_string)
return ob_get_clean();
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用render_template('index.html', array('foo' => 'bar'))
且仅$foo
与"bar"
模板中显示的值一起使用.
Dar*_*ton 52
Range()本身并不隐藏,但我仍然看到很多人在迭代:
for ($i=0; $i < $x; $i++) {
// code...
}
Run Code Online (Sandbox Code Playgroud)
当他们可以使用时:
foreach (range(0, 12) as $number) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
你可以做一些简单的事情
foreach (range(date("Y"), date("Y")+20) as $i)
{
print "\t<option value=\"{$i}\">{$i}</option>\n";
}
Run Code Online (Sandbox Code Playgroud)
Vol*_*erK 44
启用PHP的webspace通常比使用(asp).net的东西便宜.你可以称之为一个功能;-)
dco*_*eau 42
该static
关键字在OOP立场之外是有用的.您可以使用以下简单的方法快速轻松地实现"memoization"或函数缓存:
<?php
function foo($arg1)
{
static $cache;
if( !isset($cache[md5($arg1)]) )
{
// Do the work here
$cache[md5($arg1)] = $results;
}
return $cache[md5($arg1)];
}
?>
Run Code Online (Sandbox Code Playgroud)
该static
关键字创建的变量仅在该函数的执行范围内持久存在.这种技术非常适合在数据库中使用get_all_books_by_id(...)
或者get_all_categories(...)
在页面加载期间多次调用的函数.
警告:确保找到为哈希创建密钥的最佳方法,几乎在任何情况下md5(...)
上述都不是一个好的决定(速度和输出长度问题),我将其用于说明目的.sprintf('%u', crc32(...))
或spl_object_hash(...)
根据具体情况可能会好得多.
e-s*_*tis 40
然后"打印"技巧
<?php $flag and print "Blah" ?>
Run Code Online (Sandbox Code Playgroud)
如果$ flag为真,将回显Blah.不与ECHO合作.
这在模板中非常方便并取代了?:这不是很容易阅读.
小智 37
你可以在变量名中使用减号,如下所示:
class style
{
....
function set_bg_colour($c)
{
$this->{'background-color'} = $c;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么要用它?不知道:也许是CSS模型?或者你需要输出一些奇怪的JSON.这是一个奇怪的功能:)
Jam*_*mol 34
可能没有多少人知道可以将常量"变量"指定为函数参数的默认值:
function myFunc($param1, $param2 = MY_CONST)
{
//code...
}
Run Code Online (Sandbox Code Playgroud)
字符串可以用来作为如果他们数组:
$str = 'hell o World';
echo $str; //outputs: "hell o World"
$str[0] = 'H';
echo $str; //outputs: "Hell o World"
$str[4] = null;
echo $str; //outputs: "Hello World"
Run Code Online (Sandbox Code Playgroud)
小智 34
HEREDOC语法是我最喜欢的隐藏功能.总是很难找到,因为你不能谷歌为<<<但它停止你必须逃避大块的HTML,仍然允许你将变量放入流.
echo <<<EOM
<div id="someblock">
<img src="{$file}" />
</div>
EOM;
Run Code Online (Sandbox Code Playgroud)
art*_*ung 33
关于PHP代码最有用的一点是,如果我不太了解一个函数,我看到我可以通过使用浏览器并输入以下内容来查找:
上个月我在一些代码中看到了"范围"功能.它是我设法永远不会使用的数百个功能之一,但结果非常有用:
该URL是http://us2.php.net/manual/en/function.range.php的别名.将函数和关键字映射到URL的简单想法非常棒.
我希望其他语言,框架,数据库,操作系统具有查找文档的简单机制.
Sam*_*152 30
/*
die('You shall not pass!');
//*/
//*
die('You shall not pass!');
//*/
Run Code Online (Sandbox Code Playgroud)
这些注释允许您在代码块被注释为一个字符时切换.
MSp*_*eij 29
我的清单......其中大多数都比"最喜欢的功能"("我希望!")更多地属于"隐藏功能",而且并非所有功能都有用,但是......是的.
// swap values. any number of vars works, obviously
list($a, $b) = array($b, $a);
// nested list() calls "fill" variables from multidim arrays:
$arr = array(
array('aaaa', 'bbb'),
array('cc', 'd')
);
list(list($a, $b), list($c, $d)) = $arr;
echo "$a $b $c $d"; // -> aaaa bbb cc d
// list() values to arrays
while (list($arr1[], $arr2[], $arr3[]) = mysql_fetch_row($res)) { .. }
// or get columns from a matrix
foreach($data as $row) list($col_1[], $col_2[], $col_3[]) = $row;
// abusing the ternary operator to set other variables as a side effect:
$foo = $condition ? 'Yes' . (($bar = 'right') && false) : 'No' . (($bar = 'left') && false);
// boolean False cast to string for concatenation becomes an empty string ''.
// you can also use list() but that's so boring ;-)
list($foo, $bar) = $condition ? array('Yes', 'right') : array('No', 'left');
Run Code Online (Sandbox Code Playgroud)
您也可以嵌套三元运算符,有时会派上用场.
// the strings' "Complex syntax" allows for *weird* stuff.
// given $i = 3, if $custom is true, set $foo to $P['size3'], else to $C['size3']:
$foo = ${$custom?'P':'C'}['size'.$i];
$foo = $custom?$P['size'.$i]:$C['size'.$i]; // does the same, but it's too long ;-)
// similarly, splitting an array $all_rows into two arrays $data0 and $data1 based
// on some field 'active' in the sub-arrays:
foreach ($all_rows as $row) ${'data'.($row['active']?1:0)}[] = $row;
// slight adaption from another answer here, I had to try out what else you could
// abuse as variable names.. turns out, way too much...
$string = 'f.> <!-? o+';
${$string} = 'asdfasf';
echo ${$string}; // -> 'asdfasf'
echo $GLOBALS['f.> <!-? o+']; // -> 'asdfasf'
// (don't do this. srsly.)
${''} = 456;
echo ${''}; // -> 456
echo $GLOBALS['']; // -> 456
// I have no idea.
Run Code Online (Sandbox Code Playgroud)
对,我现在停下来:-)
嗯,已经有一段时间..
// just discovered you can comment the hell out of php:
$q/* snarf */=/* quux */$_GET/* foo */[/* bar */'q'/* bazz */]/* yadda */;
Run Code Online (Sandbox Code Playgroud)
因此,刚发现您可以将任何字符串作为方法名称传递,如果用大括号括起来的话.您不能将任何字符串定义为方法唉,但您可以使用__call()捕获它们,并根据需要进一步处理它们.嗯....
class foo {
function __call($func, $args) {
eval ($func);
}
}
$x = new foo;
$x->{'foreach(range(1, 10) as $i) {echo $i."\n";}'}();
Run Code Online (Sandbox Code Playgroud)
在Reddit发现这个小宝石评论:
$foo = 'abcde';
$strlen = 'strlen';
echo "$foo is {$strlen($foo)} characters long."; // "abcde is 5 characters long."
Run Code Online (Sandbox Code Playgroud)
你不能像这样直接调用{}内的函数,但你可以使用variables-holding-the-function-name并调用它们!(*和*你也可以使用变量变量)
Mat*_*ger 26
数组操作.
大量用于处理和操作数组的工具.它可能不是PHP独有的,但我从来没有使用过这么简单的语言.
And*_*lor 26
我有点像你,我已经编写了超过8年的PHP编码.大约一年前我不得不参加.NET/C#课程,我非常喜欢C#语言(讨厌ASP.NET),但它让我成为了一个更好的PHP开发人员.
PHP作为一种语言非常差,但是,我非常快,LAMP堆栈非常棒.最终产品远远超过了各部分的总和.
那说,回答你的问题:
我喜欢SPL,C#中的集合类是我一开始就喜欢它的东西.现在我可以吃蛋糕了.
安德鲁
sta*_*san 24
我有点惊讶没有人提到它,但我最喜欢的数组之一就是使用plus运算符.这有点像array_merge()
但有点简单.我发现它通常是我想要的.实际上,它接收RHS中的所有条目并使它们出现在LHS的副本中,根据需要进行覆盖(即它是非交换的).对于以"默认"数组开始并在一次点击中添加一些实际值非常有用,同时为未提供的值保留默认值.
请求的代码示例:
// Set the normal defaults.
$control_defaults = array( 'type' => 'text', 'size' => 30 );
// ... many lines later ...
$control_5 = $control_defaults + array( 'name' => 'surname', 'size' => 40 );
// This is the same as:
// $control_5 = array( 'type' => 'text', 'name' => 'surname', 'size' => 40 );
Run Code Online (Sandbox Code Playgroud)
Geo*_*uer 21
这是一个,我喜欢如何设置未提供的函数参数的默认值更容易:
function MyMethod($VarICareAbout, $VarIDontCareAbout = 'yippie') { }
Run Code Online (Sandbox Code Playgroud)
Bob*_*ger 21
快速和脏是默认值.
该语言充满了有用的快捷方式,这使得PHP成为缩短产品上市时间的(小)项目的理想选择.不是那么干净的PHP代码是不可能的,只需要一些额外的努力和经验.
但是我喜欢PHP,因为它可以让我在没有输入文章的情况下表达我想要的东西.
PHP:
if (preg_match("/cat/","one cat")) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
JAVA:
import java.util.regex.*;
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat")
if (m.find()) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
是的,这包括不输入Int.
Sha*_*e H 16
通过ob_start()输出缓冲比大多数人意识到的要有用得多.这里的第一个隐藏功能是ob_start接受回调:
function twiterize($text) {
// Replace @somename with the full twitter handle
return preg_replace("(\s+)@(\w)+(\s+)", "http://www.twitter.com/${2}", $text);
}
ob_start(twiterize);
Run Code Online (Sandbox Code Playgroud)
其次,您可以嵌套输出缓冲区...使用前面的示例:
ob_start(parseTemplate);
// ...
ob_start(twiterize);
// ...
ob_end_flush();
// ...
ob_end_flush();
Run Code Online (Sandbox Code Playgroud)
帮助内容,文本广告,字典/索引功能,链接,链接重定向以进行跟踪,模板引擎,通过使用这两件事的不同组合,所有这些都非常容易.
man*_*ock 16
您可以使用break N;
退出嵌套循环(以弥补缺乏goto
).例如
for (int i=0; i<100; i++) {
foreach ($myarr as $item) {
if ($item['name'] == 'abort')
break 2;
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息,请访问http://php.net/manual/en/control-structures.break.php
Jan*_*man 15
实际上,你不是很正确,你不能指定方法所期望的类型,它可以按照你的期望工作.
function foo ( array $param0, stdClass $param1 );
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于"数组"和对象名称.
依此类推,您甚至可以将自己的类传递给预期的参数.使用其他方法调用方法/函数将导致致命错误.
关于PHP中良好智能感知的另一个暗示.我们使用ZendStudio,如果你为你的方法编写好的PHPDocs,它实际上会工作得更好,它会在暗示时查看它们.
小智 13
a)手册 - 非常全面,最新,只是一个巨大的灵感来源,同时解决问题 - 被困?浏览/搜索手册,它会来找你
b)数组 - 它们是塑料的,它们是关联索引的,它们可以很容易地嵌套(!)以组成一些野生数据结构,并且有许多函数仅用于数组操作.哦,我是否提到将单独的变量视为值数组?
c)eval()和类似的结构(如动态变量和函数名称)允许更大的灵活性(如果你知道你正在做什么,仍然相对安全) - 没有什么比基本定义自己的流程的程序更好(在飞行中甚至是特定的执行
d)最容易被忽视的东西:因为ZEND引擎中的几乎所有内容都是zVal(本质上是指针引用的集合),能够以函数返回值返回任何内容
另外,我想指出一个很棒的功能,但其中一个与PHP源相关的功能比语言更多(因此 - 单独列出):
e)编写C扩展的难易程度(主要是OpenAL或SDL等其他对象的接口) - 优秀的源代码结构和"内部"上与"外部"一样多的强大工具 - 如果您需要扩展功能稍微进一步.
Chr*_*der 13
日期功能.我必须整天处理大量的时间信息和日期字符串,所以像strftime()和strtotime()这样的函数真是太棒了.
Eri*_*ser 13
除了即时访问开始编码你需要的任何网站?
除了魔术方法和反射,一些有趣的功能是:
serialize
/ unserialize
- 通过sql,cookies,进程,flatfile保存状态良好.好东西.json_encode
/ json_decode
- 即时AJAX乐趣get_class
- 对那些疲惫松散的时刻有帮助 call_user_func_array
- 当您可以将代码作为字符串使用时(功能强大)method_exists
- 反思func_num_arg
s/func_get_arg
- 未知参数ftwset_error_handler
/ set_exception_handler
- 脚本语言的非常好的调试功能Jus*_*son 12
通过错误控制操作符@的错误抑制几乎不应该被使用.它通过简单地忽略错误来促进懒惰和非防御性编码实践,创建调试噩梦,因为所有类型的错误 - 甚至是致命错误 - 都将被抑制,并且在某些情况下,可能会导致性能下降(特别是在抑制大的时候)大量的错误).
djn*_*djn 10
好吧,我最近向付费客户发送了我的第一个GUI应用程序 - 用PHP编写!它从条形码阅读器或GUI按钮,复选框,单选按钮或文本字段,商店到SQLite或远程MySQL收集数据,启动其他Windows应用程序,将压缩的XML报告作为电子邮件附件发送,加密和解密存储的数据,甚至播放声音完成后.
是用miniPHP和Winbinder做的.这够隐藏吗?我想没有多少PHP开发人员真的试过这个.
您可以轻松地将元素添加到数组中.
$my_array = array();
$my_array[] = 'first element';
$my_array[] = 'second element';
Run Code Online (Sandbox Code Playgroud)
元素可以是任何东西:对象,数组,标量......
正如其他人所提到的,在命令行级别运行PHP的能力非常棒.我将PHP脚本设置为cron作业,以便始终进行数据清理和备份.只需使用以下行启动文件:
#!/usr/bin/php5
<?php
// start coding here
Run Code Online (Sandbox Code Playgroud)
请注意,第一行可能会有所不同,具体取决于系统上安装PHP的位置.
从这里开始,很容易为更复杂的系统级进程(如守护进程)实现PHP .
速记布尔链
<?php
TRUE AND print 'Hello';
FALSE OR print 'World';
// Prints "Hello World";
// Complex example...
User::logged_in() or die('Not allowed');
User::is_admin() AND print 'Admin Area';
Run Code Online (Sandbox Code Playgroud)
如果您在Web可访问区域中拥有PHP文件,那么这非常有用.通过在每个文件的顶部插入这个小花絮,您可以确保没有人可以访问任何文件,但index.php
<?php defined('YOURCONSTANT') or die('Not allowed');
///rest of your code
Run Code Online (Sandbox Code Playgroud)
内置过滤器,用于根据特定的预定义类型解析变量 - 以及覆盖基础知识(int/float等),扩展到覆盖电子邮件,URL,甚至变量是有效的正则表达式.
http://ch2.php.net/manual/en/book.filter.php
在字符串中使用数组元素或对象属性.
而不是写作
$newVar = $ar['foo']['bar'];
echo "Array value is $newVar";
$newVar = $obj->foo->bar;
echo "Object value is $newVar";
Run Code Online (Sandbox Code Playgroud)
你可以写:
echo "Array value is {$ar['foo']['bar']}";
echo "Object value is {$obj->foo->bar}";
Run Code Online (Sandbox Code Playgroud)
该ReflectionClass类提供有关给定类的信息.
$classInfo = new ReflectionClass ('MyClass');
if ($classInfo->hasMethod($methodName))
{
$cm = $classInfo->getMethod($name);
$methodResult = $cm->invoke(null);
}
Run Code Online (Sandbox Code Playgroud)
除其他外,检查方法是否存在并调用它是有用的.
几乎任何文件类型都可以included
从.html到.jpeg.将执行在PHP开放标记内绑定的任何字节字符串.是的,goat.se的图像可以包含您所有常用的实用功能.我猜测的内部行为include
是将输入文件转换为字符串,并解析任何PHP代码.