Probeer PHP Tuts script te begrijpen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas D L

Bas D L

06/11/2012 10:27:12
Quote Anchor link
Onderstaand script komt van http://www.phptuts.nl/view/45/8/ en ik probeer het volgende te begrijpen.
In class table function draw() staat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($row->getCells() as $cell) {
   echo '<td>'.$cell->getContent().'</td>'.PHP_EOL;
}

?>


Hoe kan het dat $row->getCells() en $cell->getContent() zonder het instantieren toch verschijnen?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
class Table {
    private $_rows;
    
    public function __construct() {
        $this->_rows = array();
    }

    
    public function append($row) {
        $this->_rows[] = $row;
    }

    
    public function draw() {
        echo '<table border="1">'.PHP_EOL; // Begin van de tabel, border voor de duidelijkheid         
        
        foreach($this->_rows as $row) {
            echo '<tr>'.PHP_EOL;
            
            foreach($row->getCells() as $cell) {
                echo '<td>'.$cell->getContent().'</td>'.PHP_EOL;
            }

        
            echo '</tr>'.PHP_EOL;
        }

        
        echo '</table>'.PHP_EOL;
    }
}


class Row {
    private $_cells;
    
    public function __construct() {
        $this->_cells = array();
    }

    
    public function append($cell) {
        $this->_cells[] = $cell;
    }

    
    public function getCells() {
        return $this->_cells;
    }
}


class Cell {
    private $_content;
    
    public function __construct($content) {
        $this->_content = $content;
    }

    
    public function getContent() {
        return $this->_content;
    }
}


$cellA1 = new Cell('Dit is cel A1');
$cellA2 = new Cell('Dit is cel A2');

$rowA = new Row();
$rowA->append($cellA1);
$rowA->append($cellA2);


$table = new Table();
$table->append($rowA);
$table->draw();

?>
Gewijzigd op 06/11/2012 10:27:49 door Bas D L
 
PHP hulp

PHP hulp

19/04/2024 08:13:26
 
No One

No One

22/12/2014 14:30:40
Quote Anchor link
Heeeeeel oud dit. maar geen reactie er onder. Beetje jammer. Bij deze dus.

Kennelijk verwacht dit script dat je in de Table->append functie een object meegeeft van het type Row. Dat gebeurt in regel 67. Daar wordt $rowA die geinstantieerd is op regel 61. De array $this->_rows bestaat uit een lijst met objecten van het type row die dus al geinstantieerd zijn.

Er zitten gelijk wat slordigheidsfoutjes in:

- Append controleert zijn input niet. Dit kan van alles zijn waarmee Table->draw op zijn snufferd gaat.
- zelfde geld voor Row->append.

Valideer altijd je input, in dit geval kan de volgende declaratie volstaan (als in deze situatie de verkeerde datatype meegegeven wordt, gaat hij daar al op zijn plaat en niet later pas, waar het lastiger debuggen is):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// let op de eerste regel waar nu Row voor $row staat
public function append(Row $row) {
    $this->_rows[] = $row;
}


 
?>
Gewijzigd op 22/12/2014 14:32:05 door No One
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.