Objek PHP vs Array - Perbandingan kinerja saat melakukan iterasi

91

Saya memiliki sejumlah besar objek PHP untuk jaringan saraf yang harus saya ulangi dan lakukan beberapa matematika. Saya bertanya-tanya apakah saya akan lebih baik menggunakan array asosiatif atas contoh kelas?

Saya berurusan dengan sekitar 3640objek dan iterasi sekitar 500waktu (paling banter) di atas itu sehingga setiap pengoptimalan mikro membantu banyak. Apakah itu pasti lebih cepat untuk dilakukan $object['value']daripada $object->value?

Edit: Jadi keduanya sama. Tapi saya kira akan ada sedikit biaya tambahan untuk konstruktor? Either way saya tidak berpikir saya ingin menukar kelas indah saya dengan array kotor: P

Louis
sumber

Jawaban:

65

Berdasarkan kode Quazzle, saya menjalankan kode berikutnya (5.4.16 windows 64bits):

<?php
class SomeClass {
    public $aaa;
    public $bbb;
    public $ccc;
    }

function p($i) {
  echo '<pre>';
  print_r($i);
  echo '</pre>';
}


$t0 = microtime(true);
$arraysOf=array();
$inicio=memory_get_usage(); 
for ($i=0; $i<1000; $i++) {
    $z = array();
    for ($j=0; $j<1000; $j++) {
        $z['aaa'] = 'aaa';
        $z['bbb'] = 'bbb';
        $z['ccc'] = $z['aaa'].$z['bbb'];            
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>arrays: '.(microtime(true) - $t0)."</p>";
echo '<p>memory: '.($fin-$inicio)."</p>";
p($z);

$t0 = microtime(true);
$arraysOf=array();
$inicio=memory_get_usage(); 
for ($i=0; $i<1000; $i++) {
    $z = new SomeClass();
    for ($j=0; $j<1000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>arrays: '.(microtime(true) - $t0)."</p>";
echo '<p>memory: '.($fin-$inicio)."</p>";
p($z);

$t0 = microtime(true);
$arraysOf=array();
$inicio=memory_get_usage(); 
for ($i=0; $i<1000; $i++) {
    $z = new stdClass();
    for ($j=0; $j<1000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>arrays: '.(microtime(true) - $t0)."</p>";
echo '<p>memory: '.($fin-$inicio)."</p>";
p($z);  
?>

Dan saya mendapatkan hasil selanjutnya:

arrays: 1.8451430797577

memory: 460416

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

arrays: 1.8294548988342

memory: 275696

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

arrays: 2.2577090263367

memory: 483648

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

Kesimpulan untuk php 5.4

  1. Kelas lebih cepat daripada Array (tapi sedikit).
  2. stdClass itu jahat.
  3. Kelas menggunakan lebih sedikit memori daripada Array. (sekitar 30-40% lebih sedikit !!)

ps: sebagai catatan, jika kelas didefinisikan tetapi anggotanya maka, penggunaan kelas ini lebih lambat. Ini juga menggunakan lebih banyak memori. Rupanya rahasianya adalah mendefinisikan anggota

Memperbarui

Saya memperbarui dari php 5.4 ke php 5.5 (jendela 5.5.12 x86).

arrays: 1.6465699672699

memory: 460400

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

arrays: 1.8687851428986

memory: 363704

SplFixedArray Object
(
    [0] => aaa
    [1] => bbb
    [2] => aaabbb
)

arrays: 1.8554251194

memory: 275568

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

arrays: 2.0101680755615

memory: 483656

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

Kesimpulan untuk php 5.5

  1. Untuk array, PHP 5.5 lebih cepat dari PHP 5.4, untuk objek hampir sama
  2. Kelas lebih lambat daripada Array berkat optimalisasi PHP 5.5 dan array.
  3. stdClass itu jahat.
  4. Class masih menggunakan lebih sedikit memori daripada Array. (sekitar 30-40% lebih sedikit !!).
  5. SplFixedArray mirip dengan menggunakan Kelas tetapi menggunakan lebih banyak memori.
magallanes
sumber
Selamat untuk Anda, Pak. Akan menarik untuk memperluas ini ke array bersarang, dll. Situs menarik untuk kinerja PHP lainnya: phpbench.com php-benchmark-script.com tetapi saya suka Anda menggunakan memori juga.
Heath N
2
Dengan PHP7 perbedaan antara array dan objek menjadi lebih signifikan. Skrip Anda menunjukkan perbedaan 30% waktu proses dan 60% memori. Itu hanya mesin saya, tetapi sebagai aturan praktis: Jangan gunakan array sebagai struct. Gunakan objek sebagai gantinya :)
KingCrunch
Apakah objek berbeda dari kelas dalam kasus ini?
Matt G
Menandai ini dengan harapan ada pembaruan PHP7. Dan mungkin PHP8 yang akan datang, jika berlaku. @magallanes
s3c
8

Saya menggunakan kode ini untuk "membuat profil" (1000 kejadian, 1000.000 baca / tulis):

function p($i) {
  echo '<pre>';
  print_r($i);
  echo '</pre>';
}


$t0 = microtime(true);
for ($i=0; $i<1000; $i++) {
    $z = array();
    for ($j=0; $j<1000; $j++) {
        $z['aaa'] = 'aaa';
        $z['bbb'] = 'bbb';
        $z['ccc'] = $z['aaa'].$z['bbb'];
    }
}
echo '<p>arrays: '.(microtime(true) - $t0);
p($z);

$t0 = microtime(true);
for ($i=0; $i<1000; $i++) {
    $z = (object) null;
    for ($j=0; $j<1000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;
    }
}
echo '<p>obj: '.(microtime(true) - $t0);
p($z);

echo '<p> phpversion '.phpversion();

Ini menghasilkan LINUX saya yang menghosting hal ini:

arrays: 1.1085488796234

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
obj: 1.2824709415436

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
phpversion 5.2.17

jadi kesimpulannya: objek lebih lambat bahkan di PHP 5.2. Jangan gunakan objek kecuali Anda benar-benar membutuhkan fitur oopnya.

Quazzle
sumber
7
dari levans pengguna stackoverflow.com/users/1473035/levans : Saya menjalankan ini dengan 5.3.8 dan objek lebih lambat, 0,51839280128479 untuk array vs 0,85355806350708 untuk objek. Saya juga menjalankannya di 5.4.13 dan mendapatkan hasil yang berlawanan, kemungkinan karena pengoptimalan kelas yang dilakukan di 5.4, 0.6256799697876 untuk array vs 0.43650078773499. Jadi sepertinya tabel telah berubah dan objek sekarang harus dituju.
Jean-Bernard Pellerin
1
Jawaban bagus, saya baru saja menguji XAMPP (Apache) dan mendapatkan hasil di bawah ini: array: 0.5174868106842 Array ([aaa] => aaa [bbb] => bbb [ccc] => aaabbb) obj: 0.72189617156982 stdClass Object ([aaa] => aaa [bbb] => bbb [ccc] => aaabbb) phpversion 5.4.19
ilhnctn
1
Saya juga menjalankan 5.4.13, tetapi mendapatkan kebalikan dari Jean-Bernard Pellerin: Array: 0.5020840167999 Objects: 1.0378720760345 Jadi saya tidak akan berkomitmen pada objek dulu.
simontemplar
Saya melakukan beberapa perubahan dalam kode dan Kelas lebih cepat daripada Array untuk php 5.4 (5.4.16 32bits Windows). Saya memberikan jawaban baru yang menjelaskan alasannya.
magallanes
PHP 5.5.11 Hasil: Array: 0.17430, Objek: 0.24183
Lex
3

Saya menggunakan kode magallanes di bawah php 7.0.9:

arrays: 0.19802498817444

memory: 324672

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.18602299690247

memory: 132376

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.1950249671936

memory: 348296

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

Dan pengguna php 7.1.3:

arrays: 0.59932994842529
memory: 444920
Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

arrays: 0.72895789146423
memory: 164512

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

arrays: 0.61777496337891
memory: 484416
stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)                      
chariothy
sumber
1
Dan jangan lupa stdClass dapat menggunakan kunci numerik string nyata. ['1' => 1] akan disimpan sebagai [1 ​​=> 1], tetapi kita bisa menggunakan $a=new stdClass(); $a->{1} = 1; $b=(array)$a;get real ['1' => 1].
chariothy
2
Jadi, kesimpulannya .. Array 18% lebih cepat tetapi mengkonsumsi memori 2,7x lebih banyak.
jchook
3

magallanes 'script @ PHP 7.3.5

  • SomeClass Object adalah yang tercepat dan teringan.
  • Array Kecepatan 1,32x . 2.70x memori.
  • stdClass Object Kecepatan 1,65x . 2.94x memori.

Output mentah:

arrays: 0.064794063568115
memory: 444920
Array (
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.048975944519043
memory: 164512
SomeClass Object (
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.081161022186279
memory: 484416
stdClass Object (
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
Qcho
sumber
3

Bagi siapa saja yang masih tertarik dengan pertanyaan ini :) Saya menjalankan kode Quazzle pada PHP 7.1 Ubuntu x64 dan mendapatkan jawaban ini:

arrays: 0.24848890304565

memory: 444920

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.23238587379456

memory: 164512

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)
arrays: 0.24422693252563

memory: 484416

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

Kesimpulan

Larik mengambil 4 (!) Memori dari objek kelas.
Kelaskan objek sedikit lebih cepat.
stdClass masih jahat © magallanes :)

ShadowMad
sumber
2

Anda belum menunjukkan kepada kami kode untuk cara $object->valuekerjanya, karena bisa jadi backend itu adalah array yang secara teoritis menggunakan array akan lebih cepat karena melibatkan satu panggilan fungsi yang lebih sedikit. Biaya melakukan pencarian mungkin akan sangat besar dibandingkan dengan pemanggilan fungsi. Jika ini adalah sebuah variabel, akan ada sedikit perbedaan karena objek dan array di PHP memiliki implementasi yang sangat mirip.

Jika Anda melihat pengoptimalan, Anda perlu membuat profil untuk memeriksa di mana sebagian besar waktu digunakan. Saya menduga bahwa mengubah objek menjadi array tidak akan membuat perbedaan besar.

Yacoby
sumber
Saya berasumsi bahwa nilai akan menjadi variabel publik, oleh karena itu pasti O (1) sementara pencarian hash mungkin tidak.
Filip Ekberg
2

Saya melihat ini adalah semacam posting lama jadi saya pikir saya akan memperbaruinya. berikut adalah kode dan statistik saya, dilakukan pada Zend CE 5.3.21 Saya mencoba untuk menguji semuanya, menyimpan info dan menariknya kembali.

V1: membutuhkan waktu 0,83 detik

for ($i=1; $i<1000000; $i++) {
  $a = get_one();
  $b = $a[0];
  $b = $a[1];
}

function get_one() {
  return array(1,1);
}

V2: membutuhkan waktu 3,05 detik

for ($i=1; $i<1000000; $i++) {
  $a = get_one();
  $b = $a->v;
  $b = $a->k;
}

function get_one() {
  $ret = new test();
  $ret->v = 1;
  $reb->k = 1;
  return $ret;
}

class test {
  public $v;
  public $k;
}

V3: membutuhkan waktu 1,98 detik (perhatikan bahwa konstruktor meningkatkan kinerja)

for ($i=1; $i<1000000; $i++) {
  $a = get_one();
  $b = $a->v;
  $b = $a->k;
}

function get_one() {
  return new test(1,1);
}

class test {
  public $v;
  public $k;
  public function __construct($v, $k) {
    $this->v = $v;
    $this->k = $k;
  }
}
Nir
sumber
1

Anda selalu dapat memeriksa kode sumber PHP untuk fitur kinerja mikro seperti itu.

Tapi sekilas, tidak melakukan ['value'] tidak akan lebih cepat karena PHP perlu melakukan Lookup di mana menemukan ['value'] meskipun pencarian hashtable harus O (1), itu tidak dijamin. Ada lebih banyak biaya tambahan saat Anda menggunakan indeks teks.

Jika objek hanya berisi 1 variabel yang perlu Anda akses yang bernilai, ada lebih banyak overhead dalam menggunakan objek.

Filip Ekberg
sumber
Dan menurut Anda, di mana properti dicari? Mereka juga ada dalam tabel hash ... (meskipun ini hanya lebih atau kurang benar di bagasi).
Artefacto
1

Saya penasaran hari ini berdasarkan tolok ukur @magallanes, jadi saya mengembangkannya sedikit. Saya menaikkan beberapa loop for untuk benar-benar menyorot celah di antara berbagai hal. Ini berjalan di Apache 2.4, mod_php, dan PHP 7.2.

Berikut tabel ringkasan untuk mempermudah hasil:

+---------------------------+---------+-----------------+
|           Test            | Memory  |      Time       |
+---------------------------+---------+-----------------+
| Array                     | 2305848 | 9.5637300014496 |
| stdClass                  | 2505824 | 11.212271928787 |
| SomeClass                 |  164920 | 3.9636149406433 | <-- *
| AnotherClass              | 2563136 | 10.872401237488 |
| SetterClass               |  905848 | 59.879059791565 |
| SetterClassDefineReturn   |  905792 | 60.484427213669 |
| SetterClassSetFromParam   |  745792 | 62.783381223679 |
| SetterClassSetKeyAndParam |  745824 | 72.155715942383 |
+---------------------------+---------+-----------------+
* - Winner winner chicken dinner

Di bawah ini adalah skrip yang dimodifikasi. Saya ingin menguji properti pengaturan dengan metode dan jenis definisi. Saya sangat terkejut menemukan bahwa menggunakan metode penyetel menambahkan hit yang signifikan pada kode. Sekarang diberikan ini adalah tes kinerja yang sangat spesifik di mana banyak aplikasi bahkan tidak akan mencapai ini. Tetapi jika Anda memiliki situs yang menangani 1000 / reqs / second dengan 1000 kelas yang digunakan dengan 1000 objek, Anda dapat melihat bagaimana hal ini dapat mempengaruhi kinerja.

<?php

set_time_limit(500);

class SomeClass {
    public $aaa;
    public $bbb;
    public $ccc;
}
    
class AnotherClass {
}

class SetterClass {
    public $aaa;
    public $bbb;
    public $ccc;

    public function setAAA() {
        $this->aaa = 'aaa';
    }

    public function setBBB() {
        $this->bbb = 'bbb';
    }

    public function setCCC() {
        $this->ccc = $this->aaa.$this->bbb;
    }
}

class SetterClassDefineReturn {
    public $aaa;
    public $bbb;
    public $ccc;

    public function setAAA():void {
        $this->aaa = 'aaa';
    }

    public function setBBB():void {
        $this->bbb = 'bbb';
    }

    public function setCCC():void {
        $this->ccc = $this->aaa.$this->bbb;
    }
}

class SetterClassSetFromParam {
    public $aaa;
    public $bbb;
    public $ccc;

    public function setAAA(string $val): void {
        $this->aaa = $val;
    }

    public function setBBB(string $val): void {
        $this->bbb = $val;
    }

    public function setCCC(string $val): void {
        $this->ccc = $val;
    }
}

class SetterClassSetKeyAndParam {
    public $aaa;
    public $bbb;
    public $ccc;

    public function set(string $key, string $val): void {
        $this->{$key} = $val;
    }
}

function p($i) {
  echo '<pre>';
  print_r($i);
  echo '</pre>';
  echo '<hr>';
}

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<1000; $i++) {
    $z = new SomeClass();
    for ($j=0; $j<10000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z);

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = new AnotherClass();
    for ($j=0; $j<5000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z);

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = new SetterClass();
    for ($j=0; $j<5000; $j++) {
        $z->setAAA();
        $z->setBBB();
        $z->setCCC();          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z);

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = new SetterClassDefineReturn();
    for ($j=0; $j<5000; $j++) {
        $z->setAAA();
        $z->setBBB();
        $z->setCCC();          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z);

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = new SetterClassSetFromParam();
    for ($j=0; $j<5000; $j++) {
        $z->setAAA('aaa');
        $z->setBBB('bbb');
        $z->setCCC('aaabbb');          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';

p($z);

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = new SetterClassSetKeyAndParam();
    for ($j=0; $j<5000; $j++) {
        $z->set('aaa', 'aaa');
        $z->set('bbb', 'bbb');  
        $z->set('ccc', 'aaabbb');        
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z);

$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = new stdClass();
    for ($j=0; $j<5000; $j++) {
        $z->aaa = 'aaa';
        $z->bbb = 'bbb';
        $z->ccc = $z->aaa.$z->bbb;          
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z); 


$t0 = microtime(true);
$arraysOf=[];
$inicio=memory_get_usage(); 
for ($i=0; $i<5000; $i++) {
    $z = [];
    for ($j=0; $j<5000; $j++) {
        $z['aaa'] = 'aaa';
        $z['bbb'] = 'bbb';
        $z['ccc'] = $z['aaa'].$z['bbb'];            
    }
    $arraysOf[]=$z;
}
$fin=memory_get_usage();    
echo '<p>Time Taken (seconds): '.(microtime(true) - $t0).'</p>';
echo '<p>Memory: '.($fin-$inicio).'</p>';
p($z);

Dan inilah hasilnya:

Time Taken (seconds): 3.9636149406433

Memory: 164920

SomeClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

-----

Time Taken (seconds): 10.872401237488

Memory: 2563136

AnotherClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

----

Time Taken (seconds): 59.879059791565

Memory: 905848

SetterClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

----

Time Taken (seconds): 60.484427213669

Memory: 905792

SetterClassDefineReturn Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

----

Time Taken (seconds): 62.783381223679

Memory: 745792

SetterClassSetFromParam Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

----

Time Taken (seconds): 72.155715942383

Memory: 745824

SetterClassSetKeyAndParam Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

----

Time Taken (seconds): 11.212271928787

Memory: 2505824

stdClass Object
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

----

Time Taken (seconds): 9.5637300014496

Memory: 2305848

Array
(
    [aaa] => aaa
    [bbb] => bbb
    [ccc] => aaabbb
)

n0nag0n
sumber
0

Jika Array dan Kelas memiliki kinerja yang sama, saya pikir menggunakan objek dari kelas yang telah ditentukan untuk menyimpan / meneruskan data bisnis akan membuat program kami lebih logis dan kode lebih mudah dibaca.

Saat ini, dengan ide modern seperti Eclipse, Netbean ... sangat mudah untuk mengetahui info apa yang dibawa suatu objek (dari kelas yang telah ditentukan) tetapi array tidak begitu

Misalnya: Dengan array

function registerCourse(array $student) {
    // Right here I don't know how a $student look like unless doing a print_r() or var_dump()
 ....
}

Dengan objek

class Studen {
    private $_name, $_age;
    public function getAge() {}
    public function getName() {}
    ..
}

function registerCourse(Studen $student) {
    // Right here I just Ctrl+Space $student or click "Student" and I know I can get name or age from it
    ...
}
trungnnh
sumber
Ini bertentangan dengan jawaban terbukti lainnya dan tidak memiliki bukti. Jadi ini lebih merupakan keyakinan ideologis, daripada jawaban yang sebenarnya.
scone