php-fig - PHP 中 side-effects 是什么?
PHP-FIG 中 PSR-1 有这样一段描述
Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.
其中
side-effects (e.g. generate output, change .ini settings, etc.)
不明其意, 请高手们赐教
回复内容:
PHP-FIG 中 PSR-1 有这样一段描述
Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.
其中
side-effects (e.g. generate output, change .ini settings, etc.)
不明其意, 请高手们赐教
副作用,就如这句英文所说:
side-effects (e.g. generate output, change .ini settings, etc.)
包括产生输出、改变ini设置等等~ 我个人认为副作用就指对环境产生影响的代码。除了上面说的,还包括写入数据库、写入缓存、调用带数据写入的接口、增加计数器计数等等等等……
PSR-1里这条规范的意思是,把能产生副作用的程序(直接写在主程序体中的、没有做任何封装的 “裸”代码)和纯声明/定义性的程序分别放在不同的文件里。主要原因是,php里所有的文件只要引入就会被执行。纯声明的程序可以直接通过require/include安全引入(通常只能引入一次),而且通常与引入顺序无关;而带副作用的程序直接require/include引入可以一次或多次,且会影响环境,甚至有对顺序的依赖。这两种代码混在一起容易导致逻辑混乱。所以有这么一条设置。
而像@suchasplus 举例的
function getResult($i){ $j = $i * 2; printf("i x 2 = %ld", $j); return $j; }
这种情况属于函数声明/定义,不是会产生副作用的代码。
另例如,如果需要引入一个文件就计数一次,最终统计一共引入了几个文件(当然有其他方法可以做到这个功能,这里仅供举例),如果你这么做:
//main.php <?php $file_count = 0; require 'a.php'; require 'b.php'; echo $file_count; ?> //a.php <?php function a(){ //... } $file_count ++; ?> //b.php <?php function b(){ //... } $file_count ++; ?>
这里,在a.php
和b.php
里 $file_count++
就属于会产生副作用的程序,而 function a
和function b
则属于声明性程序,如此混用就属于违反PSR-1的设计。对此,一种符合规范的改进则是将a.php
和b.php
里的$file_count++
提到单独文件:
//main.php <?php $file_count = 0; require 'a.php'; require 'count_file.php'; require 'b.php'; require 'count_file.php'; echo $file_count; ?> //a.php <?php function a(){ //... } ?> //b.php <?php function b(){ //... } ?> //file_count.php <?php $file_count ++; ?>
side effect就是副作用的意思 比如
function getResult($i){
$j = $i * 2;
printf("i x 2 = %ld", $j);
return $j;
}
printf这句话就是side effect
Pascal中有function和procedure的区分, 即函数和过程
PHP用function都包含了, 就像PHP的array包含了tuple/list/dict一样

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
