League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
1
2
3
4
5
6
7
8
9
10
| $args = array( 'verplicht' => 1, 'optioneel' => null .. ); doeIets($args); function doIets($args) { } |
Dan kan je in je functie kijken of het argument in de array zit.
[ Voor 14% gewijzigd door dvdheiden op 18-03-2011 12:21 ]
- Eén optionele parameter gebruiken welke een array() is, waar je door middel van key=>value waardes de juiste parameters doorgeeft. Dan kun je met een switch (of if) de juiste variabelen selecteren en code uitvoeren.
- De overige optionele variabele leeg (of null) meegeven.
Doel van m'n code is eigenlijk om een stukje XML te genereren op basis van de optionele array. Nu werkt dit dus prima als ik maar 1 optionele array heb maar met meerdere word het al een stukje lastiger.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| if(!empty($pref_params)){ $prefs = $xml->createElement('prefs'); $add->appendChild($prefs); foreach($pref_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $prefs->appendChild($xmlelement); } } if(!empty($limit_params)){ $limits = $xml->createElement('limits'); $add->appendChild($limits); foreach($limit_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $limits->appendChild($xmlelement); } } |
Daar gebruik het eigenlijk voor
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
1
2
3
| <?php doeiets($verplicht, $optioneel2, null, $optioneel4); ?> |
Gaan denk ik ... Aangezien ze toch als null gedefinieerd worden als ze niet meegegeven worden lijkt me dit de overzichtelijkste oplossing, ipv met arrays klooien..
Verwijderd
Als je alleen 3 wilt gebruiken moet je 1 & 2 ook doorgeven. 4 kun je dan wel negeren.
doeiets("verplichte waarde, null, null, "optionele waarde 3");
1
2
3
4
5
6
7
8
9
10
11
12
| $elm = null; $params = array(); if ($pref_param) { $elm = $xml->createElement('prefs'); $params = $pref_param; } .. $add->appendChild($elm); foreach($params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $elm->appendChild($xmlelement); } |
Welke methode je daarvoor gebruikt om je functie aan te roepen maakt verder niet uit.
Het gaat om meerdere paramsHackZois schreef op vrijdag 18 maart 2011 @ 12:32:
Zo te zien verschilt alleen het element, dus kan je die toch gemakkelijk a.d.h.v. je parameter maken, de rest veranderd verder niet, zoiets:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 $elm = null; $params = array(); if ($pref_param) { $elm = $xml->createElement('prefs'); $params = $pref_param; } .. $add->appendChild($elm); foreach($params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $elm->appendChild($xmlelement); }
Welke methode je daarvoor gebruikt om je functie aan te roepen maakt verder niet uit.
Misschien dat dit het een stukje verduidelijkt.
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
| function domainCreatePacket($gen_params, $host_params, $pref_params = null, $limit_params = null){ // Create new XML document. $xml = new DomDocument('1.0', 'UTF-8'); $xml->formatOutput = true; // Create packet $packet = $xml->createElement('packet'); $packet->setAttribute('version', '1.4.2.0'); $xml->appendChild($packet); $client = $xml->createElement('domain'); $packet->appendChild($client); $add = $xml->createElement('add'); $client->appendChild($add); $gen_setup = $xml->createElement('gen_setup'); $add->appendChild($gen_setup); foreach($gen_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $gen_setup->appendChild($xmlelement); } $hosting = $xml->createElement('hosting'); $add->appendChild($hosting); $htype = $xml->createElement($gen_params['htype']); $hosting->appendChild($htype); foreach($host_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $htype->appendChild($xmlelement); } if(!empty($pref_params)){ $prefs = $xml->createElement('prefs'); $add->appendChild($prefs); foreach($pref_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $prefs->appendChild($xmlelement); } } if(!empty($limit_params)){ $limits = $xml->createElement('limits'); $add->appendChild($limits); foreach($limit_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $limits->appendChild($xmlelement); } } return $xml->saveXML(); } |
Ik denk dat ik dan inderdaad ga voor de functie aanroepen met null als waarde
1
2
3
4
5
| $gen = array('name' => 'koektrommel2.nl', 'client_id' => $client->id, 'htype' => 'std_fwd', 'status' => '0'); $hosting = array('dest_url' => 'http://koekje.nl', 'ip_address' => '192.168.1.60'); if($pleskapi->createDomain($host, $gen, $hosting)){ echo "Domein is aangemaakt."; } |
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
misschien, als je het in een grote optionele 2d array kan zetten, kan je het zo doen
1
2
3
4
5
6
7
8
9
10
11
| function doe_iets($verplicht, $optioneel) { ... //doe iets met verplicht foreach($optioneel as $opt_name => $opt_values) { $node = $xml->createElement($opt_name); $add->appendChild($node); foreach ($opt_values as $key => $value) { $xmlelement = $xml->createElement($key, $value); $node->appendChild($xmlelement); } } } |
edit::naar aanleiding van de code hierboven even snel:
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
| function domainCreatePacket($gen_params, $host_params, $opt_params = null){ // Create new XML document. // .. // Create packet // .. $hosting = $xml->createElement('hosting'); $add->appendChild($hosting); $htype = $xml->createElement($gen_params['htype']); $hosting->appendChild($htype); foreach($host_params as $key => $value){ $xmlelement = $xml->createElement($key, $value); $htype->appendChild($xmlelement); } // Add general setup and optional parameters $opt_params['gen_setup'] = $gen_setup; foreach($opt_params as $opt_name => $opt_values) { $node = $xml->createElement($opt_name); $add->appendChild($node); foreach ($opt_values as $key => $value) { $xmlelement = $xml->createElement($key, $value); $node->appendChild($xmlelement); } } return $xml->saveXML(); } |
[ Voor 46% gewijzigd door kaesve op 18-03-2011 13:04 ]
Dit is voor een groot gedeelte al het geval, de class die ik daarboven neerzet is alleen het aanmaken van het pakketje (maar ik mag er idd wel een private van makenalex3305 schreef op vrijdag 18 maart 2011 @ 12:47:
Kijk ook even of je niet het een en ander in private functies kunt stoppen. Anders heb je kans dat je dadelijk een ontzettend grote functie krijgt, welke onleesbaar wordt.
1
2
3
4
5
6
7
8
9
10
| function createDomain($host, $gen_params, $host_params, $pref_params = null, $limit_params = null){ $curl = $this->curlInit($host); $packet = $this->domainCreatePacket($gen_params, $host_params, $pref_params, $limit_params); echo $packet; $response = $this->sendRequest($curl, $packet); echo $response; if($this->parseResponse($response)){ return true; } } |
Dat zou dan de public function worden en de rest privates
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W
@kaesve
Ik heb nog een aanpassing gemaakt dat ik alsnog maar altijd 1 array hoef mee te geven
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
| private function domainCreatePacket($params){ // Create new XML document. $xml = new DomDocument('1.0', 'UTF-8'); $xml->formatOutput = true; // Create packet $packet = $xml->createElement('packet'); $packet->setAttribute('version', '1.4.2.0'); $xml->appendChild($packet); $client = $xml->createElement('domain'); $packet->appendChild($client); $add = $xml->createElement('add'); $client->appendChild($add); // Add general setup and optional parameters foreach($params as $name => $values) { $node = $xml->createElement($name); $add->appendChild($node); if($name == 'hosting'){ $node2 = $xml->createElement($params['gen_setup']['htype']); $node->appendChild($node2); $node = $node2; } foreach ($values as $key => $value) { $xmlelement = $xml->createElement($key, $value); $node->appendChild($xmlelement); } } return $xml->saveXML(); } |
League of Legends [Last Updated 22-08-2012]: [EUW] Jeffro (Now:Silver, S1:Bronze), RankedSolo5x5: 1502 [120W/106L], Dominion: 84W, TT: 3W, Normal: 504W