Applicatie naamgeving

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Ozzie PHP

Ozzie PHP

06/12/2011 21:28:30
Quote Anchor link
Jaron T op 06/12/2011 18:18:21:
Ozzie PHP op 06/12/2011 17:04:26:
Als de functie in de User class staat dan zou ik zeggen getName().

dan krijg je:

$user_id = 12;

$user = new User($user_id);
$user_name = $user->getName();

of

$user_name = User::getName($user_id);


oei.. dit is zooo tegen de regels van OOP in.


Verklaar je nader aub.
 
PHP hulp

PHP hulp

29/03/2024 14:55:15
 
Niels K

Niels K

07/12/2011 00:13:09
Quote Anchor link
PHP Scripter op 06/12/2011 21:25:35:
Niels, lees mijn post a.u.b. nog eens goed! ;-)

Dat weet ik, daarom begon ik ook met, 'Overigens ....'
 
PHP Scripter

PHP Scripter

11/12/2011 01:07:05
Quote Anchor link
Jaron, zou je nog willen posten? Danku!
 
PHP Scripter

PHP Scripter

12/12/2011 18:46:12
Quote Anchor link
Bumpy 'ride'!
 
PHP Scripter

PHP Scripter

15/12/2011 15:25:30
Quote Anchor link
BUMP
 
Niels K

Niels K

15/12/2011 15:28:54
Quote Anchor link
PHP Scripter,

Het kan zijn dat Jaron op een één of andere manier niet in staat is om op dit forum te komen. Het lijkt mij het beste dat je dit even middels een PM oplost.

Niels
 
Ozzie PHP

Ozzie PHP

15/12/2011 15:38:58
Quote Anchor link
Ik ben ook benieuwd naar het antwoord van Jaron.
@PHP Scripter: als Jaron via PM reageert laat mij dan ook even het antwoord weten :)
 
Niels K

Niels K

15/12/2011 15:40:17
Quote Anchor link
Los van dat, het (blijven) bumpen van dit topic lijkt mij niet de bedoeling, vandaar dat ik met de bovenstaande oplossing kwam.
 
Wouter J

Wouter J

15/12/2011 15:42:50
Quote Anchor link
Jaron is in andere topics ook gewoon actief, het lijkt me dus dat hij best op het forum kan. Waarom zou jaron zijn standpunt niet willen verdedigen? Of waarom wil je jezelf niet verloren geven?
 
Niels K

Niels K

15/12/2011 15:44:15
Quote Anchor link
Dat weet ik niet, en dat lijkt me ook niet belangrijk. Jaron is niet verplicht om op dit topic te reageren. Laten we het antwoord via de PM afwachten, en dit topic niet heel de tijd omhoog bumpen.

Toevoeging: Wanneer het antwoord via de PM is ontvangen, graag hier plaatsen.
Gewijzigd op 15/12/2011 15:57:05 door Niels K
 
Ozzie PHP

Ozzie PHP

15/12/2011 15:56:00
Quote Anchor link
Liever nog zien we het antwoord gewoon hier in dit topic...

Het woord is aan...

JARON!
 
Ozzie PHP

Ozzie PHP

17/12/2011 15:48:25
Quote Anchor link
@PHP Scripter: Heeft Jaron al iets laten horen via PM?
 
Wouter J

Wouter J

17/12/2011 20:14:00
Quote Anchor link
@ozzie, dit is nog steeds bumpen van het topic... I.p.v. vragen op antwoord vragen of iemand anders het antwoord al gevonden heeft...
Ik weet dat ik de moderators niet mag helpen, maar ik begin dit een beetje storend te vinden.
 
Ozzie PHP

Ozzie PHP

17/12/2011 20:17:19
Quote Anchor link
Wouter, PHP Scripter zou een PM sturen naar Jaron. Ik vraag gewoon of daar al reactie op is. Mja, misschien storend voor jou. Ik vind het veel storender dat iemand een stelling deponeert en die vervolgens niet wil / kan verdedigen.
 
Pim -

Pim -

20/12/2011 00:30:51
Quote Anchor link
Haha, wat een reacties op 1 zinnetje ;).
Ik denk dat hij meent dat
$user_name = User::getName($user_id);
Niet net is en het
$user_name = User::getById($user_id)->getName();
zou moeten zijn.

Ik vind zelf trouwens
$user = new User($user_id);
een lelijke methode om data uit je DB te halen en een User te instantiëren, omdat je complexe handelingen (DB query) uitvoert in de constructor, die in mijn ogen slechts het object moet opzetten, niet vullen.

De mooiste methode is m.i. een statische method factory, zoals ik eerder gebruikt heb en die staat hier niet in. Misschien bedoelde Jason dat. In dat geval ben ik het met hem eens, al had hij dat best wat beter mogen toelichten.
 
Ozzie PHP

Ozzie PHP

20/12/2011 08:35:02
Quote Anchor link
Hallo Pim,

Da's alweer een tijdje geleden. Leuk om te zien dat je er weer bent.

Zou je mij eens kunnen uitleggen:

1) Waarom $user_name = User::getName($user_id) niet netjes is? Waarom is $user_name = User::getById($user_id)->getName() beter? En hoe werkt deze (in mijn ogen vreemde) constructie precies?

2) Waarom $user = new User($user_id) lelijk is? Ik heb in het verleden regelmatig voorbij zien komen dat het id in de constructor wordt meegegeven. Hoe zou jij het zelf dan doen?

Graag je reactie.
Gewijzigd op 20/12/2011 08:36:40 door Ozzie PHP
 
Pim -

Pim -

20/12/2011 13:45:08
Quote Anchor link
1: omdat het logischer is om een user te zoeken en die naar zijn naam vragen (wat de code doet, eerst een user opbouwen en daar getName op uitvoeren) dan aan het modeltype, de class, te vragen welke naam bij welke identifier hoort.

2: omdat een factory, het patroon dat dan gebruikt wordt, een dynamischer opbouw mogelijk maakt en een betere scheiding van verantwoordelijkheden bevat.

Dit zijn wel vooral 'estetische' overwegingen. Andere methodes kunnen net zo goed prima functioneren en ik wil ze helemaal niet met klem afraden. De net genoemde oplossingen vind ik alleen mooier.

Toevoeging op 20/12/2011 13:55:00:

De veel gebruikte ORM, dat wat de relatie van objecten en de db beheert, Doctrine2 zal, met behulp van reflection, bij het opbouwen van bestaande 'entities', bijv. een user, zelfs de constructor overslaan. Deze gebruik je dan alleen bij het aanmaken van nieuwe entities. Zo lijkt het net alsof de opgeslagen entities in het geheugen behouden blijven en dat is zo ongeveer het ultieme streven van een ORM.

Toevoeging op 20/12/2011 14:10:45:

Oh en die constructie heet geloof ik method of call chaining. Je roept de rechter functie aan op het resultaat van de linker functie:

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
<?php
class Number
{
    protected $val;
    public function __construct($val)
    {

        $this->val = $val;
    }


    // Maak een nieuwe instantie van zichzelf (dezelfde klasse) en geef die als waard de som van de eigen waarde en het argument
    public function add($n)
    {

        return new self($this->val + $n);
    }

    public function __toString()
    {

        return $this->val;
    }
}

$n = new Number(3);

echo $n->add(4);
// Geeft 7. Het object op $n maakt een nieuw object aan met waarde 7, deze echo je

echo $n-add(4)->add(2);
// Geeft 9. Het object $n maakt een nieuw object aan met waarde 7
// Dit object maakt vervolgens weer een nieuw object aan met waarde 9
// Je hebt hier dus een ketting gemaakt van functie-aanroepen


$n->add(2)->add(54)->add(3)->add(213);
// Kan natuurlijk ook
?>


Om even verder te gaan met onzin spuien:
De instantie van 'Number' zijn 'value objects', oftewel objecten die gekenmerkt worden door een bepaalde waarde. Ook zijn ze onveranderlijk. Een aanpassing zal dus altijd een nieuw object opleveren. In dit geval is $this->val ook niet aan te passen. Hetzelfde object zal dus altijd dezelfde waarde dragen, wat in veel situaties handig is.
Bron
 
Ozzie PHP

Ozzie PHP

20/12/2011 14:11:33
Quote Anchor link
Uhm ja... t/m punt 1 kon ik je nog volgen :)

Kun je een voorbeeld geven van punt 2 hoe jij dan een user zou aanmaken op basis van een id.

Dus je hebt:

$user_id = 12;

... en hoe dan verder?
 
Pim -

Pim -

20/12/2011 14:13:58
Quote Anchor link
In striktere OO talen zijn de primitieven van PHP (int, string etc) value objects.

(Toch?)
 
Ozzie PHP

Ozzie PHP

20/12/2011 14:26:04
Quote Anchor link
Hou het simpel Pim anders kan ik je niet volgen. Kun je een simpel voorbeeldje geven van hoe jij het zou doen?
 

Pagina: « vorige 1 2 3 volgende »



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.