鑰匙要點
- symfony控制台組件允許開發人員創建結構化和可測試的CLI命令,為命令變得更加複雜提供了各種工具。
> SYMFONY控制台中的問題助手可用於交互式收集命令執行的信息,確保用戶輸入有效並符合某些條件。
Symfony Console提供了通過表類顯示表格數據的能力,這對於顯示結構化數據很有用。
- >使用Symfony Console,可以實現進度條,以提供有關執行命令的反饋,並估算操作將花費多長時間。 Symfony控制台組件允許通過著色和样式自定義命令行工具輸出,甚至允許使用OutputFormatterStyle類創建自定義樣式。
- 本文由Wern Ancheta進行了同行評審。感謝SitePoint所有的同行評審員製作SitePoint內容的最佳狀態!
- >不可否認的是,開發軟件時的控制台命令有多麼有用。不久前,我們重新引入了Symfony Console組件。 >
> 這是我們今天要看的:高級Symfony Console Tools。 >讓我們創建一個命令,可以用來顯示其中一些功能。大多數基本功能都在對Symfony Console文章的重新引入中顯示,因此請務必在進行前進之前檢查一下 - 這是一個快速但有用的閱讀!
>
>安裝
在這裡可以找到有關作曲家的基本信息,如果您不熟悉設計良好的孤立的PHP環境,可以在其中開發諸如Vagrant之類的PHP應用程序,我們有一本很棒的書,可以深入地解釋所有內容在這裡購買。
創建我們的命令
>讓我們創建一個最喜歡的命令:fizzbuzz。
>
<span>composer require symfony/console </span>
編寫一個從1到x打印數字的程序。但是,對於三個打印“ Fizz”的倍數,而不是數字和倍數的倍數。對於三個和五個倍數的數字,打印“ fizzbuzz”。 我們的命令將收到一個參數,這將是fizzbuzz的最高限制。
>首先,讓我們創建我們的fizzbuzz課程。
><span>composer require symfony/console </span>
>非常簡單。 FirstNFizzBuzz()方法將FizzBuzz的結果打印出數字的$ MaxValue。它通過遞歸調用CounculateFizzBuzz()方法來做到這一點。
>接下來,讓我們寫下我們的命令。創建一個帶有以下內容的FizzCommand.php文件:
><span><span><?php </span></span><span><span>declare(strict_types=1); </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>class Fizzbuzz{ </span></span><span> </span><span> <span>public function isFizz(int $value): bool{ </span></span><span> <span>if($value % 3 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function isBuzz(int $value): bool{ </span></span><span> <span>if($value % 5 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function calculateFizzBuzz(int $number): bool{ </span></span><span> <span>if($this->isFizz($number) && $this->isBuzz($number)){ </span></span><span> <span>echo "FizzBuzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isFizz($number)){ </span></span><span> <span>echo "Fizz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isBuzz($number)){ </span></span><span> <span>echo "Buzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>echo $number . "\n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> </span><span> <span>public function firstNFizzbuzz(int $maxValue): void{ </span></span><span> <span>$startValue = 1; </span></span><span> </span><span> <span>while($startValue </span><span> <span>$this->calculateFizzBuzz($startValue); </span></span><span> <span>$startValue++; </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>} </span></span></span></span>
>最後我們的控制台文件。
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz") </span></span><span> <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?'); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> <span>$input = $input->getArgument('Limit'); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($input); </span></span><span> <span>} </span></span><span> </span><span><span>} </span></span></span>
在這裡,我們創建一個新的控制台應用程序,然後將我們的fizzCommand()註冊到其中。不要忘記使此文件可執行。
>現在,我們可以通過運行./console命令來檢查我們的命令是否正確註冊。我們還可以使用./console fizzbuzz:fizzbuzz 25執行命令。這將計算並打印1至25的fizzbuzz結果。
> 到目前為止,我們還沒有做任何新的事情。但是有幾種方法可以提高命令。首先,命令不是很直觀。我們怎麼知道我們必須將限制傳遞給命令?為此,Symfony控制台為我們提供了一個問題。問題助手
helper提供的問題提供了詢問用戶更多信息的功能。這樣,我們可以交互收集信息以執行我們的命令。
>
>讓我們將命令更改為,而不是通過命令執行提示符接收執行限制,而是向用戶詢問限制。為此,助手的問題有一個方法:ask()。此方法作為參數輸入接口,輸出接口和問題。>
>讓我們更改fizzcommand.php文件,這樣看起來像這樣:>
#!/usr/bin/env php <span><span><?php </span></span><span> </span><span><span>require_once __DIR__ . '/vendor/autoload.php'; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Application</span>; </span></span><span><span>use FizzBuzz<span>\FizzCommand</span>; </span></span><span> </span><span><span>$app = new Application(); </span></span><span><span>$app->add(new FizzCommand()); </span></span><span><span>$app->run(); </span></span></span>>我們不再期望在configure()方法上參數。我們實例化了一個新問題,默認值為25,然後在我們之前討論的ask()方法上使用它。
現在,我們有一個交互式命令,該命令在執行FizzBuzz之前要求限制。
助手的問題還為我們提供了驗證答案的功能。因此,讓我們使用它來確保極限是整數。
>
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span><span>use Symfony<span>\Component\Console\Question\Question</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz"); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> </span><span> <span>$helper = $this->getHelper('question'); </span></span><span> <span>$question = new Question('Please select a limit for this execution: ', 25); </span></span><span> <span>$limit = $helper->ask($input, $output, $question); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($limit); </span></span><span> <span>} </span></span><span><span>} </span></span></span>>我們不僅通過使用setValidator()函數確保我們的限制是整數,而且如果用戶插入一些空白,並且還將最大嘗試量的嘗試允許設置為兩個。 🎜>
Helper提供的問題提供了更多功能,例如讓用戶從答案列表中選擇,多個答案,隱藏用戶答案和自動完成。官方文檔有更多有關此的信息。
>表
控制台組件提供的另一個非常有用的功能是顯示表格數據的可能性。
要顯示一個表,我們需要使用表類;設置標頭和行,最後渲染表。在顯示結構化數據時,這可能非常有用。讓我們想像我們要創建一個命令來顯示某些公制系統的轉換。>讓我們將MetricsCommand.php添加到我們的新php文件中。
和我們的新控制台文件:
<span>composer require symfony/console </span>
>這是一個非常簡單的命令:它呈現一個表,其中一些值從英寸轉換為厘米。如果我們使用./console指標運行命令,則結果將是這樣的:
>
>表類還為我們提供了不同的分離器樣式。如果您想了解更多信息,請檢查此頁面。 。
進度欄
>問題和表非常有用,但最重要的要素可能是進度欄。進度條向我們提供有關執行命令的反饋,並讓我們清楚地了解我們可能需要等待操作才能完成的時間。
>>進度條對於更長的運行命令至關重要。要使用它們,我們需要進度鍵,將其傳遞給總數的總數(如果我們實際知道我們期望多少個單位)並在命令執行時將其推進。
一個帶有進度欄的簡單命令看起來像這樣:
><span><span><?php </span></span><span><span>declare(strict_types=1); </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>class Fizzbuzz{ </span></span><span> </span><span> <span>public function isFizz(int $value): bool{ </span></span><span> <span>if($value % 3 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function isBuzz(int $value): bool{ </span></span><span> <span>if($value % 5 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function calculateFizzBuzz(int $number): bool{ </span></span><span> <span>if($this->isFizz($number) && $this->isBuzz($number)){ </span></span><span> <span>echo "FizzBuzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isFizz($number)){ </span></span><span> <span>echo "Fizz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isBuzz($number)){ </span></span><span> <span>echo "Buzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>echo $number . "\n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> </span><span> <span>public function firstNFizzbuzz(int $maxValue): void{ </span></span><span> <span>$startValue = 1; </span></span><span> </span><span> <span>while($startValue </span><span> <span>$this->calculateFizzBuzz($startValue); </span></span><span> <span>$startValue++; </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>} </span></span></span></span>
和各自的控制台:
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz") </span></span><span> <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?'); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> <span>$input = $input->getArgument('Limit'); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($input); </span></span><span> <span>} </span></span><span> </span><span><span>} </span></span></span>
這個非常簡單的命令。我們通過睡眠()函數設置了欄和循環。最終輸出將看起來像:
可以在官方文檔中找到有關進度條的更多信息。
>自定義我們的進度欄
>自定義進度欄對於用戶等待時提供額外信息可能很有用。
默認情況下,進度條中顯示的信息取決於輸出接口實例的冗長級別。因此,如果我們想顯示不同級別的信息,我們可以使用setFormat()方法。內置格式是:正常,冗長,umey_verbose和debug。
#!/usr/bin/env php <span><span><?php </span></span><span> </span><span><span>require_once __DIR__ . '/vendor/autoload.php'; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Application</span>; </span></span><span><span>use FizzBuzz<span>\FizzCommand</span>; </span></span><span> </span><span><span>$app = new Application(); </span></span><span><span>$app->add(new FizzCommand()); </span></span><span><span>$app->run(); </span></span></span>
例如,如果我們使用普通格式,則結果將如下所示:
>
我們還可以設置自己的格式。
>進度欄是由不同特定佔位符組成的字符串。我們可以將這些特定的佔位持有人結合起來,以創建自己的進度欄。可用的佔位符為:當前,最大,欄,百分比,經過,剩餘,估計,內存和消息。因此,例如,如果我們想複製完全相同的默認進度欄,我們可以使用以下內容:
>自定義進度條還有更多的內容 - 在此處閱讀有關。
><span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span><span>use Symfony<span>\Component\Console\Question\Question</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz"); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> </span><span> <span>$helper = $this->getHelper('question'); </span></span><span> <span>$question = new Question('Please select a limit for this execution: ', 25); </span></span><span> <span>$limit = $helper->ask($input, $output, $question); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($limit); </span></span><span> <span>} </span></span><span><span>} </span></span></span>>在命令中調用命令
>具有另一個非常有用的功能是能夠在命令中運行命令。例如,我們可能有一個命令,該命令取決於另一個命令成功運行的命令,或者我們可能希望以序列運行的一系列命令。
> 例如,想像一下,想像我們想創建一個命令來運行我們的fizzbuzz命令。 我們需要在 /src文件夾和execute()方法內創建一個新命令,請具有以下內容:
><span>composer require symfony/console </span>
>由於我們的fizzbuzz命令沒有收到任何論點,這就是足夠的。如果我們的命令需要參數,我們將不得不創建一系列參數,並使用arrayInput類通過它們。
除此之外顏色和样式
>著色和样式輸出對於向用戶提醒或通知用戶的執行中的某些內容很有用。為此,我們只需要在Writeln()方法中添加以下標籤,就像以下內容:
>也可以選擇使用outputformatterstyle類來定義我們自己的樣式:
<span><span><?php </span></span><span><span>declare(strict_types=1); </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>class Fizzbuzz{ </span></span><span> </span><span> <span>public function isFizz(int $value): bool{ </span></span><span> <span>if($value % 3 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function isBuzz(int $value): bool{ </span></span><span> <span>if($value % 5 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function calculateFizzBuzz(int $number): bool{ </span></span><span> <span>if($this->isFizz($number) && $this->isBuzz($number)){ </span></span><span> <span>echo "FizzBuzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isFizz($number)){ </span></span><span> <span>echo "Fizz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isBuzz($number)){ </span></span><span> <span>echo "Buzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>echo $number . "\n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> </span><span> <span>public function firstNFizzbuzz(int $maxValue): void{ </span></span><span> <span>$startValue = 1; </span></span><span> </span><span> <span>while($startValue </span><span> <span>$this->calculateFizzBuzz($startValue); </span></span><span> <span>$startValue++; </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>} </span></span></span></span>
有關造型的更多信息,可以在此處找到輸出。
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz") </span></span><span> <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?'); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> <span>$input = $input->getArgument('Limit'); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($input); </span></span><span> <span>} </span></span><span> </span><span><span>} </span></span></span>>
總結
從樣式到助手,我們看到了Symfony控制台開箱即用的許多功能。今天之後,絕對沒有任何藉口可以記錄下來的命令行工具!
>您經常使用哪些助手和組件?您如何啟動CLI工具? Symfony控制台是否足夠適合您,還是您更喜歡替代方案?
經常詢問有關Symfony Console的問題(常見問題解答)Symfony控制台和其他PHP控制台應用程序之間的關鍵差異是什麼? Symfony Console是Symfony PHP框架的組成部分,它提供了一種創建命令行界面(CLI)的方法。與其他PHP控制台應用程序不同,Symfony Console為構建CLI應用程序提供了一種結構化和麵向對象的方法。它提供了一組類來定義命令,處理輸入和輸出並管理應用程序的生命週期。此外,Symfony控制台支持顏色格式,進度條,表格和其他高級控制台功能,這些功能在其他PHP控制台應用程序中未常見。
如何在Symfony Console中創建自定義命令?在Symfony控制台中創建自定義命令涉及擴展命令類並實現configure()和execute()方法。 configure()方法用於定義命令名稱,參數和選項,而execute()方法包含命令的邏輯。創建命令類後,可以使用add()方法添加到應用輸出接口以處理命令中的輸入和輸出。 InputInterface提供了獲取命令參數和選項的方法,而輸出接口提供了寫入控制台的方法。您還可以使用InputArgument和InputOption類來定義命令參數和選項。
>>我如何在Symfony控制台中使用助手? SYMFONY控制台提供指揮所類測試命令。 CommandTester類允許您執行具有特定輸入的命令並捕獲輸出。然後,您可以在輸出上做出斷言以驗證命令的行為。
如何處理Symfony控制台中的錯誤?
>
>我如何在Symfony Framework之外使用Symfony Console組件?>
>如何創建具有多個命令的控制台應用程序?以使用多個命令創建控制台應用程序,您可以在應用程序中添加多個命令類。每個命令類應擴展命令類,並實現configure()和execute()方法。然後,您可以使用應用程序的add()方法添加命令。
>
>如何使用Symfony Console組件來自動化任務?> Symfony Console Component可以用於自動化通過創建執行特定任務並從命令行或腳本運行這些命令的命令來完成任務。您還可以使用諸如cron之類的任務調度程序安排命令以特定的間隔運行。
>以上是超越基礎知識的符號控制台 - 助手和其他工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在PHP中設置會話cookie參數可以通過session_set_cookie_params()函數實現。 1)使用該函數設置參數,如過期時間、路徑、域名、安全標誌等;2)調用session_start()使參數生效;3)根據需求動態調整參數,如用戶登錄狀態;4)注意設置secure和httponly標誌以提升安全性。

在PHP中使用會話的主要目的是維護用戶在不同頁面之間的狀態。 1)會話通過session_start()函數啟動,創建唯一會話ID並存儲在用戶cookie中。 2)會話數據保存在服務器上,允許在不同請求間傳遞數據,如登錄狀態和購物車內容。

如何在子域名間共享會話?通過設置通用域名的會話cookie實現。 1.在服務器端設置會話cookie的域為.example.com。 2.選擇合適的會話存儲方式,如內存、數據庫或分佈式緩存。 3.通過cookie傳遞會話ID,服務器根據ID檢索和更新會話數據。

HTTPS通过加密数据传输、防止中间人攻击和提供身份验证,显著提升了会话的安全性。1)加密数据传输:HTTPS使用SSL/TLS协议加密数据,确保数据在传输过程中不被窃取或篡改。2)防止中间人攻击:通过SSL/TLS握手过程,客户端验证服务器证书,确保连接合法性。3)提供身份验证:HTTPS确保连接的是合法服务器,保护数据完整性和机密性。

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具