Het toevoegen van extra properties aan een class object

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jorn Reed

Jorn Reed

24/01/2023 10:14:13
Quote Anchor link
Hoi, ik heb hier een customer class.
Die vul ik met gegevens, die ik vervolgens in een json object gooi.
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
class Customer implements JsonSerializable {
 
    public $firstName;
    public $middleName;
    public $lastName;
    public $email;
    public $phoneMobile;
    public $gender;
    public $zipcode;
    public $city;
    public $address;
    public $houseNumber;
    public $houseNumberExtension;
    public $birthDate;
    public $iban;
    public $setAVG;
 
    public function __construct($data){
        $this->firstName = $data['fname'];
        $this->middleName = $data['prefix'];
        $this->lastName = $data['lname'];
        $this->email = $data['email'];
        $this->phoneMobile = $data['phone'];
        $this->gender = $data['gender'];
        $this->zipcode = $data['zipcode'];
        $this->city = $data['place'];
        $this->address = $data['street'];
        $this->houseNumber = $data['houseNumber'];
        $this->houseNumberExtension = $data['extension'];
        $this->birthDate = $data['birthdate'];
        $this->iban = strtoupper(str_replace(" ", "", $data['iban']));
        $this->setAVG = $data['avg'];
    }
 
    public function jsonSerialize() {
        return [
            "FirstName"=> $this->firstName,
            "MiddleName"=> $this->middleName,
            "LastName"=> $this->lastName,
            "Email"=> $this->email,
            "PhoneMobile"=> $this->phoneMobile,
            "Gender"=> $this->gender,
            "Zipcode" => $this->zipcode,
            "City"=> $this->city,
            "Address" => $this->address,
            "HouseNumber" => $this->houseNumber,
            "HouseNumberExtension" => $this->houseNumberExtension,
            "BirthDate"=> $this->birthDate,
            "IBAN"=> $this->iban,
            "SetAVG"=> $this->setAVG,
            "Country"=> 'Nederland',
            "Language"=> 'nl_NL',
            "UseValidation" => true,
            "IsValidated" => true,
        ];
    }
}


Nu komt er iets nieuws. Als iemand minder jarig is (dit word met JS gedaan) dan komt er een extra email veld bij in het formulier voor ouder/voogd. Op het moment dus dat `$_POST['EmailCaregiver']` bestaat/aanwezig is, wil ik die meegeven in het customer object.

Wat is een handige manier om dit voor elkaar te krijgen?
Gewijzigd op 24/01/2023 10:48:54 door Jorn Reed
 
PHP hulp

PHP hulp

04/02/2023 15:59:10
 
Jan R

Jan R

24/01/2023 10:25:20
Quote Anchor link
Gewoon altijd meegeven met de json en tonen indien nodig
 
- Ariën  -
Beheerder

- Ariën -

24/01/2023 10:43:57
Quote Anchor link
Jorn, kan je de code ook in dit topic delen, tussen code-tags?
 
Jorn Reed

Jorn Reed

24/01/2023 11:11:41
Quote Anchor link
heb het even aangepast! :)
 
Jan Koehoorn

Jan Koehoorn

24/01/2023 18:56:26
Quote Anchor link
Paar dingen die me opvallen:

De array keys in het data argument hebben een andere naamgeving dan je class properties. Daardoor moet je alles letterlijk handmatig toekennen. Als ze overeen zouden komen, kon je die toekenning in de constructor gewoon met een foreach doen.

Je hebt geen enkele check op het argument van je constructor. Je weet dus niet of alle keys in je $data argument wel bestaan. Ik kan me bijvoorbeeld goed voorstellen dat middleName weinig voorkomt.

Je hebt een method jsonSerialize die een associatieve array teruggeeft. Dat is een verwarrende naam voor die functie, want ik zou verwachten dat er een geserializede JSON string geretourneerd zou worden.
 
Ivo P

Ivo P

24/01/2023 23:46:23
Quote Anchor link
Jorn Reed op 24/01/2023 10:14:13:
Als iemand minder jarig is (dit word met JS gedaan)


Die moest ik 3x lezen.
Minder dan 1x per jaar jarig? (geboren op 29 feb of zo?)
 
Ozzie PHP

Ozzie PHP

24/01/2023 23:56:54
Quote Anchor link
Ivo P op 24/01/2023 23:46:23:
Minder dan 1x per jaar jarig? (geboren op 29 feb of zo?)

Ik vermoed eerder een spatie teveel ;-)
 



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.