1. php 類中的static有什麼作用
static 是C中很常用的修飾符,它被用來控制變數的存儲方式和可見性
static 聲明的變數在C語言中有兩方面的特徵:
1)、變數會被放在程序的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。
2)、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。
2、問題:Static的理解
關於static變數,請選擇下面所有說法正確的內容:
A、若全局變數僅在單個C文件中訪問,則可以將這個變數修改為靜態全局變數,以降低模塊間的耦合度;
B、若全局變數僅由單個函數訪問,則可以將這個變數改為該函數的靜態局部變數,以降低模塊間的耦合度;
C、設計和使用訪問動態全局變數、靜態全局變數、靜態局部變數的函數時,需要考慮重入問題;
D、靜態全局變數過大,可那會導致堆棧溢出。
答案與分析:
對於A,B:根據本篇概述部分的說明b),我們知道,A,B都是正確的。
對於C:根據本篇概述部分的說明a),我們知道,C是正確的(所謂的函數重入問題,下面會詳細闡述)。
對於D:靜態變數放在程序的全局數據區,而不是在堆棧中分配,所以不可能導致堆棧溢出,D是錯誤的。
因此,答案是A、B、C。
3、問題:不可重入函數
曾經設計過如下一個函數,在代碼檢視的時候被提醒有bug,因為這個函數是不可重入的,為什麼?
unsigned int sum_int( unsigned int base )
{
unsigned int index;
static unsigned int sum = 0; // 注意,是static類型的。
for (index = 1; index <= base; index++)
{
sum += index;
}
return sum;
}
答案與分析:
所謂的函數是可重入的(也可以說是可預測的),即:只要輸入數據相同就應產生相同的輸出。
這個函數之所以是不可預測的,就是因為函數中使用了static變數,因為static變數的特徵,這樣的函數被稱為:帶「內部存儲器」功能的的函數。因此如果我們需要一個可重入的函數,那麼,我們一定要避免函數中使用static變數,這種函數中的static變數,使用原則是,能不用盡量不用。
將上面的函數修改為可重入的函數很簡單,只要將聲明sum變數中的static關鍵字去掉,變數sum即變為一個auto 類型的變數,函數即變為一個可重入的函數。
當然,有些時候,在函數中是必須要使用static變數的,比如當某函數的返回值為指針類型時,則必須是static的局部變數的地址作為返回值,若為auto類型,則返回為錯指針。
2. 程序靜態分析的著名的靜態分析工具
Meta-Compilation(Coverity)
由Stanford大學的Dawson Engler副教授等研究開發,該靜態分析工具允許用戶使用一種稱作metal的狀態機語言編寫自定義的時序規則,從而實現了靜態分析工具的可擴展性。MC的實際效果非常優秀,號稱在Linux內核中找出來數百個安全漏洞。MC目前已經商業化,屬於Coverity Inc.2014年被Synopsys收購。目前學術領域比較認可的靜態分析工具,其技術處於領先地位。
mygcc 由一個法國人N. Volanschi開發,其思想來源於MC,試圖將自定義的錯誤檢測集成到編譯時。
Klocwork
國內用的最為廣泛的靜態分析工具,由加拿大北電於1996年研發,是中國最早的能夠檢測語義缺陷的靜態分析工具。截止到2015年其版本號為V10,也就是大家常說的K10
LDRA Testbed
英國的編碼規則類檢測工具,前身為Liverpool大學開發,能夠支持C/C++數千種條目的規則檢測,包括MISRA C/C++, GJB5369等,是最早進入中國市場的靜態分析工具,在軍隊、軍工廣泛使用,但其技術僅支持風格類檢測,無法進行語義缺陷分析,導致一些常用的運行時缺陷無法發現或者較高誤漏報,由此市場佔有率逐步下降。截止到2015年其版本號為9.5
HP Fortify
美國HP公司的支持安全漏洞類的檢測工具,能夠檢測C/C++/Java/PHP/ASP/JavaScript等多種語言,數千種檢測項,是國內使用最為廣泛的靜態分析工具。但該工具整體的誤報漏報率較高,雖然支持很多種安全漏洞,但需要用戶做很多的二次開發工作。
Cobot(庫博)
北京大學軟體工程中心研發的靜態分析工具,能夠支持編碼規則,語義缺陷的程序分析,能夠支持C/C++數千條規則和缺陷的檢測,是我國唯一可以稱的上是靜態分析產品的商業化工具。由於其自主知識產權,對國內的操作系統,編碼標准支持的較好,檢測精度也基本與上述工具持平,所以也得到了很多用戶的認可。
Parasoft C++Test
美國Parasoft公司研發的支持C、C++靜態分析的工具,該工具除了可以檢測編碼規則外,還能檢測少量的語義缺陷,此外能夠進行測試用例生成。
3. php 靜態方法 是什麼意思
<?php
header('content-type:text/html;charset=utf-8');
/*
普通方法,存放類內,只有一份
靜態方法,也是存放於類內,只有一份
區別在於:普通方法需要對象去調用,需要綁定$this
即,普通方法,必須要有對象,然後讓對象來調用
而靜態方法,不屬於哪一個對象,因此不需要綁定$this
即,不需要對象也可以調用
*/
class Human{
static public $head=1;
public function easyeat(){
echo '普通方法吃飯<br />';
}
static public function eat(){
echo '靜態方法吃飯<br />';
}
public function intro(){
echo $this->name;
}
}
Error_reporting(E_ALL|E_STRICT);
//此時沒有對象!方法可以執行
Human::eat();
/*
以下方法easyeat是一個非靜態方法,就由對象來調用,但,用類來調用此方法來也可以執行,而嚴格狀態下,此方法會執行,同時報錯,
Strict Standards: Non-static method Human::easyeat() should not be called statically in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 32
*/
Human::easyeat();
/*
接上,從邏輯來理解,如果用類名靜態調用非靜態(普通)方法
比如:intro()
那麼,這個$this是指哪個對象呢??
因此會報錯,因為找不到對象!
Fatal error: Using $this when not in object context in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 23
*/
Human::intro();
/*
如上分析,其實,非靜態方法,是不能由類名靜態調用的,但目前,php中的面向對象檢測不夠嚴格,只要靜態方法中沒有$this關鍵字,就會轉化成靜態方法來處理!
*/
$li=new Human();
$li->eat();
/*
總結:
類》訪問->靜態方法(類的方法)->可以
類》訪問->普通方法(對象的方法)->不可以(雖然方法里不用$this關鍵字時,可以!但不支持這種寫法)
對象》訪問》靜態方法(類的方法)->可以
對象》訪問》普通方法(對象的方法)->可以
*/
?>
4. php:static靜態變數和普通變數的區別分析
區別:
在一個函數中,靜態變數的值在程序執行離開時,其值不丟失,而普通變數會丟失。
舉例:
<?php
/**
*普通變數示例
*/
functionnormal_var()
{
$normal_var=0;
var_mp($normal_var);
$normal_var++;
}
/**
*靜態變數示例
*/
functionstatic_var()
{
static$static_var=0;
var_mp($static_var);
$static_var++;
}
normal_var();//輸出0
normal_var();//還是輸出0
static_var();//輸出0
static_var();//會輸出1
具體請參考php手冊網頁鏈接
5. 有什麼Mac軟體能夠進行代碼審查,靜態分析嗎
bitnami phabricator mac免費開源
bitnami phabricator主要是由php寫的,而且是以website方式運行的,可以幫助開發人員改進工作流程並編寫更好的軟體!
6. 有哪些工具可以幫助debug或做靜態分析
PyChecker 是一個靜態分析工具,它不僅能報告源代碼中的錯誤,並且會報告錯誤類型和復雜度。Pylint 是檢驗模塊是否達到代碼標準的另一個工具想要了解相關內容可以看黑馬程序員的公開課。我看了很多公開課,憑良心說,黑馬的是最有深度的,不至於白聽一節理論。
並且他們的社區和視頻庫,都有很多很豐富的內容不管是小白還是進階,都值得看看。官網對話框也可以直接領取課程大綱。
7. php中static 靜態變數和普通變數的區別
全局變數(外部變數)的說明之前再冠以static 就構成了靜態的全局變數。全局變數本身就是靜態存儲方式, 靜態全局變數當然也是靜態存儲方式。 這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。 而靜態全局變數則限制了其作用域, 即只在定義該變數的源文件內有效, 在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。 從以上分析可以看出, 把局部變數改變為靜態變數後是改變了它的存儲方式即改變了它的生存期。把全局變數改變為靜態變數後是改變了它的作用域, 限制了它的使用范圍。 static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對於可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件 static全局變數與普通的全局變數有什麼區別:static全局變數只初使化一次,防止在其他文件單元中被引用; static局部變數和普通局部變數有什麼區別:static局部變數只被初始化一次,下一次依據上一次結果值; static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
8. PHP Static延遲靜態綁定用法分析
本文實例講述了PHP
Static延遲靜態綁定用法。分享給大家供大家參考,具體如下:
PHP5.3以後引入了延遲靜態綁定static,它是為了解決什麼問題呢?php的繼承模型中有一個存在已久的問題,那就是在父類中引用擴展類的最終狀態比較困難。來看一個例子。
class
A
{
public
static
function
echoClass(){
echo
__CLASS__;
}
public
static
function
test(){
self::echoClass();
}
}
class
B
extends
A
{
public
static
function
echoClass()
{
echo
__CLASS__;
}
}
B::test();
//輸出A
在PHP5.3中加入了一個新特性:延遲靜態綁定,就是把本來在定義階段固定下來的表達式或變數,改在執行階段才決定,比如當一個子類繼承了父類的靜態表達式的時候,它的值並不能被改變,有時不希望看到這種情況。
下面的例子解決了上面提出的問題:
class
A
{
public
static
function
echoClass(){
echo
__CLASS__;
}
public
static
function
test()
{
static::echoClass();
}
}
class
B
extends
A
{
public
static
function
echoClass(){
echo
__CLASS__;
}
}
B::test();
//輸出B
第8行的static::echoClass();定義了一個靜態延遲綁定方法,直到B調用test的時候才執行原本定義的時候執行的方法。
更多關於PHP相關內容感興趣的讀者可查看本站專題:《php操作office文檔技巧總結(包括word,excel,access,ppt)》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字元串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
9. 當前市面上的代碼審計工具哪個比較好
第一類:Seay源代碼審計系統
這是基於C#語言開發的一款針對PHP代碼安全性審計的系統,主要運行於Windows系統上。這款軟體能夠發現SQL注入、代碼執行、命令執行、文件包含、文件上傳、繞過轉義防護、拒絕服務、XSS跨站、信息泄露、任意URL跳轉等漏洞,基本上覆蓋常見的PHP漏洞。在功能上,它支持一鍵審計、代碼調試、函數定位、插件擴展、自定會規則配置、代碼高亮、編碼調試轉換、資料庫執行監控等數十項強大功能。
第二類:Fortify SCA
Fortify
SCA是由惠普研發的一款商業軟體產品,針對源代碼進行專業的白盒安全審計。當然,它是收費的,而且這種商業軟體一般都價格不菲。它有Windows、Linux、Unix以及Mac版本,通過內置的五大主要分析引擎對應用軟體的源代碼進行靜態分析。
第三類:RIPS
RIPS是一款基於PHP開發的針對PHP代碼安全審計的軟體。另外,它也是一款開源軟體,由國外安全研究員開發,程序只有450KB,目前能下載到的最新版本是0.54,不過這款程序已經停止更新了。它最大的亮點在於調用了PHP內置解析器介面token_get_all,並且使用Parser做了語法分析,實現了跨文件的變數及函數追蹤,掃描結果中非常直觀地展示了漏洞形成及變數傳遞過程,誤報率非常低。RIPS能夠發現SQL注入、XSS跨站、文件包含、代碼執行、文件讀取等多種漏洞,文件多種樣式的代碼高亮。
10. pycharm編寫php需要什麼插件
下個30天試用版吧。我前兩天下了一個,寫了幾十行代碼。因為一直用IntelliJ IDEA寫Clojure代碼,所以用著還行。不過PyCharm目前沒找到太大的亮點。 而且還有些小bug,比如靜態分析的時候,有一個簡單的小函數居然跟我說某局部變數未定義