PHP static关键字用来定义静态方法及属性,在类中可用来延迟静态绑定以及在函数中修饰变量。
1:先来谈谈static在函数中的用法;
function add(){ static $a = 0; echo $a,"<br />"; $a++; }
这里static的作用即类似于C里的static的作用,保证$a变量只有在add()第一次调用时才会被初始化,但需要注意的是定义static变量的时候,可以不赋初值,可以给定初值,但是赋初值的时候不能使用表达式或者调用函数赋值,否则会报错。
另外一点需要注意的即是static变量不会存储引用,如下:
function get_obj_ref(){ static $obj = null; echo 'Ststic obj:',"<br />"; var_dump($obj); if(is_null($obj)){ $obj = &new stdClass(); } return $obj; } $obj = get_obj_ref(); $obj2 = get_obj_ref(); function get_obj_noref(){ static $obj = null; echo 'Ststic obj:',"<br />"; var_dump($obj); if(is_null($obj)){ $obj = new stdClass(); } return $obj; } $obj = get_obj_noref(); $obj2 = get_obj_noref();
当static存储引用时,二次调用函数后,该变量的值并未被保存下来,且运行上面程序会报Deprecated错误,即返回引用值赋值的用法已弃。
2:static在类中的延迟静态绑定;
延迟静态绑定是指允许在一个静态继承的上下文中引用被调用类。延迟绑定的意思为:static::不再为定义当前方法所在的类,而是实际运行时所在的类。注:它可以用于(但不限于)静态方法的调用。
除了简单的static延迟绑定的用法,还有一种转发调用,即使用self::,parent::,static:: 以及forward_static_call()(该函数只能在方法中调用)将转发调用信息,如下:
class A { public static function foo() { static::who(); } public static function who() { echo CLASS."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo CLASS."\n"; } } class C extends B { public static function who() { echo CLASS."\n"; } } C::test();
这里得到的结果是A C C,显然在调用parent::foo()时,还是使用了运行时调用类。
还有一点需要注意的是:只有显示声明的static类才是从属与子类的。
以下部分内容参考此博文:点击打开链接:PHP static 继承
<span style="font-size:18px;">class A { protected static $var1 = null; protected static $var2 = null; public static function test(){ if(!static::$var2){ static::$var2 = static::$var1; } echo get_called_class().' '.static::$var2.' '; } } class B extends A { protected static $var1 = 'b'; } class C extends A { protected static $var1 = 'c'; } B::test(); C::test(); </span>
这里得到的结果是 b b。这里B类首先调用过test()方法,调用后$var2变量已经被赋值,而C类未定义自己的$var2变量,且父类中$var2变量值已经存在,故直接使用,若在B C类中显示定义$var2变量,则结果又会有所不同。
以上是php中关于static关键字的用法及注意点的详解的详细内容。更多信息请关注PHP中文网其他相关文章!

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)

phpisusedforsenderemailsduetoitsbuilt-inmail()函数andsupportiveLibrariesLikePhpMailerandSwiftMailer.1)usethemail()functionforbasicemails,butithasimails.2)butithasimimitations.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显着提升PHP应用的性能。

依赖性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增强量产生性,可验证性和Maintainability.itallowspasspassingDepentenciesLikEdenceSeconnectionSeconnectionStoclasseconnectionStoclasseSasasasasareTers,interitationApertatingAeseritatingEaseTestingEasingEaseTeStingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中