導航:首頁 > 編程語言 > phpjavaif

phpjavaif

發布時間:2022-11-19 22:45:42

1. 這個java代碼用php怎麼編寫

你這段代碼是actionscript。代碼功能是利用位元組碼將時間轉換(可能是出於加密目的)

php中沒有byteArray,可以利用16進製表達式截取轉換

$time=time();
echo$time," ";
echotransformInt($time);
functiontransformInt($arg1)
{
//將數字轉換成16進制time的16進制有8位長度
$bint=dechex($arg1);
$rint='';
$i=0;
while($i<4)
{
$part=hexdec(substr($bint,$i*2,2));
$newpart=$part&240^240|($part&15)+1&15;
$newpart=$newpart%255;
$rint=dechex($newpart).$rint;
++$i;
}
returnhexdec($rint);
}

有一個問題 就是as中int是32位,轉換後如果溢出,會顯示負數。php的整型則根據平台自動適應,64位系統中是int64,這個演算法里不會溢出。

2. 怎麼php發送get請求給Java,然後返回想要的具體參數

curl請求java介面,介面返回值後進行相關操作,給你貼一個curl的代碼

functionihttp_request($url,$post='',$extra=array(),$timeout=60){
$urlset=parse_url($url);
if(empty($urlset['path'])){
$urlset['path']='/';
}
if(!empty($urlset['query'])){
$urlset['query']="?{$urlset['query']}";
}
if(empty($urlset['port'])){
$urlset['port']=$urlset['scheme']=='https'?'443':'80';
}
if(strexists($url,'https://')&&!extension_loaded('openssl')){
if(!extension_loaded("openssl")){
message('請開啟您PHP環境的openssl');
}
}
if(function_exists('curl_init')&&function_exists('curl_exec')){
$ch=curl_init();
if(ver_compare(phpversion(),'5.6')>=0){
curl_setopt($ch,CURLOPT_SAFE_UPLOAD,false);
}
if(!empty($extra['ip'])){
$extra['Host']=$urlset['host'];
$urlset['host']=$extra['ip'];
unset($extra['ip']);
}
curl_setopt($ch,CURLOPT_URL,$urlset['scheme'].'://'.$urlset['host'].($urlset['port']=='80'?'':':'.$urlset['port']).$urlset['path'].$urlset['query']);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
@curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_HEADER,1);
@curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_0);
if($post){
if(is_array($post)){
$filepost=false;
foreach($postas$name=>$value){
if((is_string($value)&&substr($value,0,1)=='@')||(class_exists('CURLFile')&&$valueinstanceofCURLFile)){
$filepost=true;
break;
}
}
if(!$filepost){
$post=http_build_query($post);
}
}
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
}
if(!empty($GLOBALS['_W']['config']['setting']['proxy'])){
$urls=parse_url($GLOBALS['_W']['config']['setting']['proxy']['host']);
if(!empty($urls['host'])){
curl_setopt($ch,CURLOPT_PROXY,"{$urls['host']}:{$urls['port']}");
$proxytype='CURLPROXY_'.strtoupper($urls['scheme']);
if(!empty($urls['scheme'])&&defined($proxytype)){
curl_setopt($ch,CURLOPT_PROXYTYPE,constant($proxytype));
}else{
curl_setopt($ch,CURLOPT_PROXYTYPE,CURLPROXY_HTTP);
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,1);
}
if(!empty($GLOBALS['_W']['config']['setting']['proxy']['auth'])){
curl_setopt($ch,CURLOPT_PROXYUSERPWD,$GLOBALS['_W']['config']['setting']['proxy']['auth']);
}
}
}
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSLVERSION,1);
if(defined('CURL_SSLVERSION_TLSv1')){
curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1);
}
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(WindowsNT6.1;WOW64;rv:9.0.1)Gecko/20100101Firefox/9.0.1');
if(!empty($extra)&&is_array($extra)){
$headers=array();
foreach($extraas$opt=>$value){
if(strexists($opt,'CURLOPT_')){
curl_setopt($ch,constant($opt),$value);
}elseif(is_numeric($opt)){
curl_setopt($ch,$opt,$value);
}else{
$headers[]="{$opt}:{$value}";
}
}
if(!empty($headers)){
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
}
}
$data=curl_exec($ch);
$status=curl_getinfo($ch);
$errno=curl_errno($ch);
$error=curl_error($ch);
curl_close($ch);
if($errno||empty($data)){
returnerror(1,$error);
}else{
returnihttp_response_parse($data);
}
}
$method=empty($post)?'GET':'POST';
$fdata="{$method}{$urlset['path']}{$urlset['query']}HTTP/1.1 ";
$fdata.="Host:{$urlset['host']} ";
if(function_exists('gzdecode')){
$fdata.="Accept-Encoding:gzip,deflate ";
}
$fdata.="Connection:close ";
if(!empty($extra)&&is_array($extra)){
foreach($extraas$opt=>$value){
if(!strexists($opt,'CURLOPT_')){
$fdata.="{$opt}:{$value} ";
}
}
}
$body='';
if($post){
if(is_array($post)){
$body=http_build_query($post);
}else{
$body=urlencode($post);
}
$fdata.='Content-Length:'.strlen($body)." {$body}";
}else{
$fdata.=" ";
}
if($urlset['scheme']=='https'){
$fp=fsockopen('ssl://'.$urlset['host'],$urlset['port'],$errno,$error);
}else{
$fp=fsockopen($urlset['host'],$urlset['port'],$errno,$error);
}
stream_set_blocking($fp,true);
stream_set_timeout($fp,$timeout);
if(!$fp){
returnerror(1,$error);
}else{
fwrite($fp,$fdata);
$content='';
while(!feof($fp))
$content.=fgets($fp,512);
fclose($fp);
returnihttp_response_parse($content,true);
}
}

3. java怎麼調用php的語句是什麼

PHP調用JAVA方式
1. 背景
在開發招商銀行信用卡分期付款功能過程中,在支付成功之後需要對銀行的返回數據進行簽名驗證,因簽名加密方式招商銀行是不提供的,只提供了相應的JAVA驗證類測試例子,而本項目採用的是PHP架構方式,因此需要PHP調用JAVA的驗證類來測試簽名是否正確。
2. 目的
本文檔提供一種PHP調用JAVA類的方式來進行招行的支付成功簽名驗證,本方法也可用於其他銀行的JAVA簽名驗證方式。
3. 名詞解釋
名詞
解釋說明
php-java-bridge
PHP和JAVA的連接橋
4. php-java-bridge安裝和配置介紹
4.1 安裝
Php-java-bridge下載路徑:
http://sourceforge.net/projects/php-java-bridge/files/RHEL_FC%20SecurityEnhancedLinux/php-java-bridge_5.4.4.2/最新php-java-bridge版本是php-java-bridge_6.2.1.tar.gz解壓之後採用/usr/local/php/phpize進行模塊編譯,提示Cannot find config.m4,版本過高問題,採用了5.4.4.2版本。
編譯及安裝:
tar zxvf php-java-bridge_5.4.4.2.tar.gz
cd php-java-bridge-5.4.4.2/
/usr/local/php/bin/phpize
./configure --disable-servlet --with-java=/usr/local/java/,/usr/local/java/jre --with-php-config=/usr/local/php/bin/php-configmake && make install
4.2 配置
vim /usr/local/php/etc/php.ini
[新增]
extension=java.so
[java]
java.java_home="/usr/local/java/"
java.java="/usr/local/java/jre/bin/java"
java.log_file="/var/log/php-java-bridge.log"java.classpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/JavaBridge.jar"java.libpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"java.log_level="3"
java.hosts="10.204.79.232:8081"
4.3 啟動
重新啟動nginx或者apache,輸入<?php phpinfo();?>可以看到java support
Enabled
java bridge
5.4.4.2
java.log_level
2
手動啟動javaBridge
java -jar JavaBridge.jar SERVLET:8080&
也可以嘗試使用java -jar JavaBridge.jar SERVLET_LOCAL:8081&4.4 測試
解壓javaBridge.jar,取出java目錄下相關的Java.inc文件測試代碼:
require_once("java/Java.inc");
$string = new Java("java.lang.String", "HelloWorld");echo $string;
$system=new Java("java.lang.System");
echo "Java version=".$system->getProperty("java.version")." ";注意:java/Java.inc記得從javaBridge.jar解壓出來放在相關php代碼中注意取值:java_is_true java_is_false java_values5. 注意事項及配置過程中的問題
下述描述在實際配置測試過程中可能會碰到的問題及解決方法:
5.1 問題
問題1:
configure: error: host_alias is not set. Make sure to run config.guessBack-end configuration failed.
Please install the recommended autoconf, libtool and automake versionsor disable back-end configuration and use the pre-compiled J2EE back-end:
./configure --disable-backend --with-java=<JAVA_HOME>
configure: error: ./configure.gnu failed for server安裝yum install libtool即可
5.2 注意事項
事項1:
遠程調用require_once(『http://10.204.79.231:8080/JavaBridget/java/Java.inc『);需要設置php.ini的allow_url_include參數為on,同時編輯 JavaBridge 部署的 Web 應用程序目錄中的 web.xml 文件,如下:
取消對這個部分的注釋,以便允許對您的 Java 類進行遠程訪問<init-param>
<param-name>promiscuous</param-name>
<param-value>On</param-value>
</init-param>
事項2:
在實際生產環境中,考慮到如果每台機器都部署一個JavaBridge服務的話,不好維護。故考慮在單台或2台左右機器上部署,其他機器連接到部署機器上,可以做分流承壓的功效並且易監控。在外網環境下發現在調用部署環境的內外網IP都無法獲取到指定文檔。實際require_once本質就是調用部署環境的java.inc文件,可以考慮把相關文件放在本地生產環境上,但在引用Java_require相關JAR包會提示連接不到JavaBridge服務,閱讀Java.inc可以查看它會通過幾個地方設置JAVA_HOST宏變數,第一種是通過require_once裡面的IP或者域名和埠,另外一種是在未設置JAVA_HOST宏變數的前提下讀取php.ini,如果都沒有java.hosts參數則默認為127.0.0.1:8080。
排除第一種方式如果採用讀取php.ini的話,因為本身java.hosts參數不屬於PHP可人為設置的參數,採用ini_set函數並不能指定java.hosts的值,所以一種方式是在所有項目的生產環境的php.ini都指定內網IP和埠,如java.hosts=10.204.79.231:8080。還有一種方式,查閱Java.inc可以看到是在未設置JAVA_HOST變數的前提下是去讀取php.ini,我們可以在require_once(『java/Java.inc『)之前新增一行define ("JAVA_HOSTS", $host)。
5.3 參考例子
個人的實際測試代碼如下:
private function _checkSign($strText, $strSign){$ret = false;
try{
$host = ConfigWrapper::load()->services->phpjava->host;if($host != NULL){
define ("JAVA_HOSTS", $host);
}
require_once(『java/Java.inc『);
java_require(self::CMBJAR);
$pay = new Java(『testCdpaySign『, self::CERFILE);$result = $pay->checkSign((string)$strText, (string)$strSign);if(java_is_true($result) == 1){
$ret = true;
}
}catch (\Exception $e) {
Logger::debug("_checkSign = " . $e->getMessage());}
return $ret;
}

4. PHP和Java之間的數組有什麼區別

第一種:通過對兩種語言寫的OA系統的比較,對這兩種語言的差異進行了一個全面的比較.

現在市場上的oa基本上可歸結為兩大陣營,即php陣營和java陣營。但對接觸oa不久的用戶來說,看到的往往只是它們的表相,只是明顯的價格差異,卻很難看出它們之間的實際差異。其實, PHP + MYSQL 不值錢不僅僅局限於oa軟體,而是整體上PHP + MYSQL開發的軟體都不如java開發的軟體值錢。為什麼PHP + MYSQL 的OA為什麼不值錢呢?首先得明白php和java之間的差異才行。

1、系統的技術架構比較

分層是將系統進行有效組織的方式,分而治之的思想是計算機領域中非常重要的思想。在好的分層思想引導下,便能實現「高內聚、低耦合」,也能將具體的問題割裂開來,易於控制、易於延展,更易於分配資源。PHP只能實現簡單的分布式兩層或三層的架構,而JAVA在這方面就十分強大,可以實現多層的網路架構。運用MVC的設計模式,可使oa系統具有更加高效、合理的系統架構。技術架構的落後,使運用php編寫的oa軟體系統先天不足,而後天又無法補足其先天上的劣勢。使得系統在可拓展性、需求應變性上與JAVA編寫的oa軟體系統的差距越來越大。架構的差距,註定了php做的oa充其量是個小家碧玉,始終無法和java這種大家閨秀同台競技。

2、資料庫訪問比較

PHP可編譯成具有與許多資料庫相連接的函數。將自己編寫外圍的函數去間接存取資料庫。通過這樣的途徑當更換使用的資料庫時,可以輕松地修改編碼以適應這樣的變化。但PHP提供的資料庫介面支持彼此不統一,比如對Oracle, MySQL,Sybase的介面,彼此都不一樣。由於PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。

而Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫,訪問資料庫的介面比較統一。如果同樣是將開發的web應用從MYSQL數據數轉到ORACLE數據,PHP需要做大量的修改工作,而且比較繁瑣。但JAVA開發的便只需要很少的更改便能實現。

資料庫訪問方式的差異,奠定了php開發出的oa和java開發出來的oa是馬車和火車的差距,前者只能亦步亦趨而且額度有限,後者卻是工業化的結晶,不僅能夠包容萬物而且速度上穩步提升。

3、安全性對比

在同是開源和跨平台的java面前,php丟掉了很多的優勢。在代碼的安全性上尤為突出。php的開發程序在別人拿到代碼後,可以很容易的進行修改。而java開發的程序由於無法看到完整的源代碼,只能看到一些編譯好的類文件,所以安全性較高。加之系統架構的優勢,在安全性上php和java是相去甚遠。

如果非要將php和java在安全性上做個比較的話,同一個小偷光顧php那是隨便拿來隨便改,想拿什麼拿什麼,拿的高興還能大筆一輝某某到此一游。而光顧java的時候,便會發現警察把守,內設自動報警裝置,即便突破重重阻擾後進入居室。那值錢的東西都放在加密後的保險櫃中,只能望洋興嘆、鎩羽而歸。

4、前瞻性和拓展性

從整體來說,php適用於中小型系統,而java適用於大型系統。Php能夠將單一的事件做好,但卻不適合完成集成度較高的多項並發事件。為什麼說php適合中小型系統而不適合做大系統呢?

首先, php缺乏多層結構支持。而對於大型的系統負荷站點,只能採用分布計算。將資料庫、應用邏輯層和表示邏輯層彼此分開,並將同層的根據流量分開,組成二維數組。而php恰恰缺乏這種支持。

其次,PHP提供的資料庫介面不統一,要將多個不同的資料庫數據統一需要花費很大的力氣。而JAVA則沒有這種缺陷,可通過SUN Java的Java Class和EJB獲得規模支持,通過EJB/CORBA以及眾多廠商的Application Server獲得結構支持。如IBM的E-business,它的核心是採用JSP/Servlet的Web Sphere,是通過CGI來提供支持的。

如果將Php比作將才,具備獨擋一方的能力。那麼java便是帥才,具有較好的前瞻性和拓展性,整體布局和協同能力強。能夠指揮千軍萬馬,最後逐鹿中原。

5、開發成本比較

既然php在諸多方面都不如java優異,那麼php開發出的oa產品何以與java產品競爭呢?在於Php陣營普遍走的是低端路線,而java陣營走的是中高端路線。兩者之間交*的區域較小。

軟體價格的高低很大程度上和自身成本和功能相掛鉤。php的入門門檻較低,絕大多數學過c的程序員都很容易轉型為php程序員,這使得php程序員的泛濫成災的同時,低成本的php軟體產品也層出不窮。以PHP最經典的組合PHP + MySQL + Apache為例,由於所有軟體都是開源免費的,所以投入並不高。

而java開發需要特定的環境,成長為一個合格的java程序員需要一定的時間,java程序員的成本也是php成本的幾倍。Java的web應用伺服器免費的有Tomcat、JBoss等,而要想具有很好的商業化服務便必須選用Web Sphere和 Web logic。這其中投入的成本無形中便超是php成本的N倍。所以,java開發oa的成本要遠遠高於php開發出來的同類軟體產品。但也正由於java開發的成本較高,很難實現抄襲和短期內逾越的可能,也使得java用開發出的產品門檻更高。

不怕不識貨,就怕貨比貨。Php開發出來的產品也能用,但是和java開出的同類產品是沒法比較的。正因為php開發的產品整體性能和java開發的相去甚遠,所以php運用低成本的低價優勢和同類的java產品抗爭,以價格落差來平衡購買者的心態。所以,PHP + MYSQL 的OA不值錢也就不足為怪了 第二種比較PHP和JSP這兩個web開發技術,在目前的情況是其實是比較PHP和Java的Web開發。以下是我就幾個主要方面進行的比較: 一、 語言比較 Php是解釋執行的伺服器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象,所以學過c語言的程序員可以很快的熟悉php的開發。而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。 Java首先要編譯成位元組碼.class文件,然後在java虛擬機上解釋執行。Java的web開發首先最容易想到的就是JSP(現在已經到JSP2.0),原來的java的web開發都是用servlet來實現的,用servlet來開發需要程序員在java的源文件中嵌入大量的html代碼。所以後來就出現了JSP,JSP可以方便的嵌入到html文件當中,其實jsp文件在伺服器上執行的時候首先會被應用伺服器轉換成servlet,然後再編譯執行。Jsp可以通過servlet和JavaBean的支持產生強大的功能。JavaBean 是一種可復用的、跨平台的軟體組件。使用javabean可以方便的實現java代碼和html的分離,能夠增強系統的功能和軟體的復用性。 Java的web開發屬於SUN公司定義的J2EE其中的規范。而且在J2EE中包括了java的web開發的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特別適合於做大型的企業級的應用。 二、 資料庫訪問比較 Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。 PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。例如:用Java開發的web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改。而PHP則需要做大量的修改工作。 三、 系統設計架構比較 採用Java的web開發技術,需要使用的是面向對象的系統設計方法,而PHP還是採用面向過程的開發方法。所以用Java進行開發前期需要做大量的系統分析和設計的工作。 四、 跨平台性 Java和PHP都有很好的跨平台的特性。幾乎都可以在不作任何修改的情況下運行在Linux或者Windows等不同的操作系統上。 五、 開發成本比較 PHP最經典的組合就是:PHP + MySQL + Apache。非常適合開發中小型的web應用,開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。 Java的web應用伺服器有免費Tomcat、JBoss等,如果需要更好的商業化的服務有:Web Sphere和 Web logic。 六、 分布式多層架構比較 PHP只能實現簡單的分布式兩層或三層的架構,而JAVA在這方面就比較強大,可以實現多層的網路架構。資料庫層(持久化層)、應用(業務)邏輯層、表示邏輯層彼此分開,而且現在不同的層都已經有一些成熟的開發框架的支持。例如Struts就是利用java的web開發技術實現了MVC的設計模式,而在業務邏輯層也有Spring框架,資料庫持久化層有Hibernate等框架。這些框架可以方便開發者高效、合理、科學得架構多層的商業應用。 下面簡要的說一下Struts,它實質上是在JSP Model2的基礎上實現的一個MVC(Model、View、Controler)框架。JSP Model2體系結構是一種聯合使用JSP 與Servlet 來提供動態內容的方法。在Struts框架中,模型由實現業務邏輯的JavaBean或EJB組件構成,控制器由Servlet實現的,視圖由一組JSP文件組成。採用Struts可以明確角色的定義和開發者與網頁設計者的分工。而且項目越復雜,其優勢越明顯。 七、 源代碼安全 PHP開發的程序的源代碼都是公開的,他人拿到php開發的程序後都可以進行修改。 Java開發的程序,最後用戶拿到的是只是一些編譯好的class類,無法看到完整的源代碼,安全性高。 八、性能比較 有人做過試驗,對這兩種種語言分別做迴圈性能測試及存取Oracle資料庫測試。 在循環性能測試中,JSP只用了令人吃驚的四秒鍾就結束了20000*20000的迴圈。而PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒。 資料庫測試中,二者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。 表格 1 PHP 與Java的比較 PHP JAVA 可復用性 低 高 開發速度 快 慢 易維護性 差 優 可移植性 優-Linux、Windows、Unix等 安全性 低 高 開發費用 低 高 多層架構 差 優 資料庫訪問 介面不統一 介面統一 可擴展性 差 優 面向對象 差 優 綜上所述,我個人認為,PHP適合於快速開發,中小型應用系統,開發成本低,能夠對變動的需求作出快速的反應。而Java適合於開發大型的應用系統,應用的前景比較廣闊,系統易維護、可復用性較好。還有,同樣功能的系統用Java開發的系統要比PHP開發的系統的價格要高.

5. 用java編程,設計一個學生類,要求包含姓名年齡、性別、java成績、c++成績、php成績

public class Student{ private String name; private String sex; private int score_java; private int score_c; private int score_php; void averagescore() { int sum = 0; int average = 0; sum += score_java+score_c+score_php; average = sum/3; System.out.println("總分:" + sum); System.out.println("平均分:" + average); } void maxminscore() { int temp = 0; int max = 0; int min = 0; temp = score_java; if(temp<score_c) temp = score_c; esle min = score_c; if(temp<score_php) temp = score_php; else if(min>score_php) min = score_php; max = temp; System.out.println(" 最高分:" + max); System.out.println(" 最低分:" + min); }}

6. 如何在java程序中調用php文件

publicStringexecPHP(StringscriptName,Stringparam){
StringBuilderoutput=newStringBuilder();
BufferedReaderinput=null;
StringphpPath="D:/xampp/php/php.exe";
try{
Stringline;
Processp=Runtime.getRuntime().exec(phpPath+""+scriptName+""+param);
input=newBufferedReader(newInputStreamReader(p.getInputStream()));
while((line=input.readLine())!=null){
output.append(line);
//p.destroy();//根據系統不同可能需要
}
p.destroy();
}catch(Exceptionerr){
err.printStackTrace();
}finally{
if(input!=null){
try{
input.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
returnoutput.toString();
}

//調用php演算法

conclusion=runPHP.execPHP(ALGORITHM_RESIDUES_URL,imageResiesId);

//php接收

$id=$argv[1];

因為此方法是java開進程直接調用php,因此是以內存方式傳參

7. php代碼翻譯成java代碼

你可以用這個

http://php-java-bridge.sourceforge.net/pjb/installation.php

8. PHP代碼轉為java代碼

沒法轉的,這個php中調用了不少外部對象,沒人能猜到那些是什麼內容的。

9. 反射調用private方法實踐(php、java)

單測中有個普遍性的問題,被側類中的private方法無法直接調用。小拽在處理過程中通過反射改變方法許可權,進行單測,分享一下,直接上代碼。
簡單被測試類
生成一個簡單的被測試類,只有個private方法。
復制代碼
代碼如下:
<?php/**
*
崔小渙單測的基本模板。
*
*
@author
cuihuan
*
@date
2015/11/12
22:15:31
*
@version
$Revision:1.0$
**/class
MyClass
{/**
*
私有方法
*
*
@param
$params
*
@return
bool
*/private
function
privateFunc($params){if(!isset($params)){return
false;}echo
"test
success";return
$params;}}
單測代碼
復制代碼
代碼如下:
<?php/***************************************************************************
*
*
$Id:
MyClassTest
T,v
1.0
PsCaseTest
cuihuan
Exp$
*
**************************************************************************//**
*
崔小渙單測的基本模板。
*
*
@author
cuihuan
*
@date
2015/11/12
22:09:31
*
@version
$Revision:1.0$
**/require_once
('./MyClass.php');class
MyClassTest
extends
PHPUnit_Framework_TestCase
{const
CLASS_NAME
=
'MyClass';const
FAIL
=
'fail';protected
$objMyClass;/**
*
@brief
setup:
Sets
up
the
fixture,
for
example,
opens
a
network
connection.
*
*
可以看做phpunit的構造函數
*/public
function
setup()
{date_default_timezone_set('PRC');$this->objMyClass
=
new
MyClass();}/**
*
利用反射,對類中的private

protect
方法進行單元測試
*
*
@param
$strMethodName
string
:反射函數名
*
@return
ReflectionMethod
obj
:回調對象
*/protected
static
function
getPrivateMethod($strMethodName)
{$objReflectClass
=
new
ReflectionClass(self::CLASS_NAME);$method
=
$objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return
$method;}/**
*
@brief
:測試private函數的調用
*/public
function
testPrivateFunc(){$testCase
=
'just
a
test
string';//
反射該類$testFunc
=
self::getPrivateMethod('privateFunc');$res
=
$testFunc->invokeArgs($this->objMyClass,
array($testCase));$this->assertEquals($testCase,
$res);$this->expectOutputRegex('/success/i');//
捕獲沒有參數異常測試try
{
$testFunc->invokeArgs($this->transfer2Pscase,
array());}
catch
(Exception
$expected)
{$this->assertNotNull($expected);return
true;}$this->fail(self::FAIL);}}
運行結果
cuihuan:test
cuixiaohuan$
phpunit
MyClassTest.php
PHPUnit
4.8.6
by
Sebastian
Bergmann
and
contributors.Time:
103
ms,
Memory:
11.75MbOK
(1
test,
3
assertions)
關鍵代碼分析
封裝了一個,被測類方法的反射調用;同時,返回方法之前處理方法的接入許可權為true,便可以訪問private的函數方法。
復制代碼
代碼如下:
/**
*
利用反射,對類中的private

protect
方法進行單元測試
*
*
@param
$strMethodName
string
:反射函數名
*
@return
ReflectionMethod
obj
:回調對象
*/protected
static
function
getPrivateMethod($strMethodName)
{$objReflectClass
=
new
ReflectionClass(self::CLASS_NAME);$method
=
$objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return
$method;}
下面給大家分享java中利用反射調用另一類的private方法
我們知道,Java應用程序不能訪問持久化類的private方法,但Hibernate沒有這個限制,它能夠訪問各種級別的方法,如private,
default,
protected,
public.
Hibernate是如何實現該功能的呢?答案是利用JAVA的反射機制,如下:
<span
style="font-size:14px;">import
java.lang.reflect.InvocationTargetException;
import
java.lang.reflect.Method;
public
class
ReflectDemo
{
public
static
void
main(String[]
args)
throws
Exception
{
Method
method
=
PackageClazz.class.getDeclaredMethod("privilegedMethod",
new
Class[]{String.class,String.class});
method.setAccessible(true);
method.invoke(new
PackageClazz(),
"452345234","q31234132");
}
}
class
PackageClazz
{
private
void
privilegedMethod(String
invokerName,String
adb)
{
System.out.println("---"+invokerName+"----"+adb);
}
}</span>
輸出結果為:---452345234----q31234132

10. Socket編程 php 與 java 通信 問題

看不懂php

但是我覺得你這個問題可能是因為php發生的EOF不符合java標准。或者根本沒有發送EOF標識。

超時應該發生在 ss = in.readLine();這一行代碼中的in.read()。

下面是j2se文檔資料
int java.io.InputStream.read()
Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

A subclass must provide an implementation of this method.

Returns:
the next byte of data, or -1 if the end of the stream is reached.
Throws:
IOException if an I/O error occurs.

這句話非常重要
Returns:
the next byte of data, or -1 if the end of the stream is reached.

當沒有發送end of the stream 標識的話,那麼程序屬於等待狀態。 也就是java端一直處於讀的狀態。
解決這個問題的話。 要麼終端手動發送eof.要麼終端發送每一次交互的位元組長。伺服器端根據這個位元組長來讀取相應長度的位元組。

閱讀全文

與phpjavaif相關的資料

熱點內容
安卓手機的表格里怎麼打勾 瀏覽:407
阿里雲伺服器有網路安全服務嗎 瀏覽:966
超解壓兔子視頻 瀏覽:22
單片機怎麼測負脈沖 瀏覽:172
魅族備份的app在哪裡 瀏覽:738
java倒三角列印 瀏覽:112
通達信回封板主圖源碼 瀏覽:44
戰地什麼伺服器 瀏覽:299
安卓為什麼老是閃退怎麼辦 瀏覽:803
樂高機器人的編程軟體下載 瀏覽:223
工作中怎麼使用加密狗 瀏覽:735
雲伺服器的後台找不到 瀏覽:98
php逐行寫入文件 瀏覽:912
javaoracleweb 瀏覽:440
京東加密碼怎麼弄 瀏覽:467
單片機程序員培訓 瀏覽:992
PHP商城源代碼csdn 瀏覽:636
怎麼把電腦里文件夾挪出來 瀏覽:693
java流程處理 瀏覽:685
ftp創建本地文件夾 瀏覽:660