A smooth sea never made a skilled sailor
[ Voor 70% gewijzigd door RobIII op 20-07-2009 20:55 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
{signature}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <? require_once(dirname(__FILE__) . "/../globalConfig.php"); class product extends webshop { //Empty constructor for Class public function __construct() {} //Return a named array with all data from object public function toArray() { $arr = array(); foreach($this as $key => $value) { $arr[$key] = $value; } return $arr; } } ?> |
maar wanneer hij in de parent class staat pakt hij hem niet (hij returned een LEGE ARRAY)
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
| <? require_once(dirname(__FILE__) . "/../globalConfig.php"); class webshop { //Attributes for class Type //Methods for class Type //Empty constructor for Class public function __construct() { $this->dbConnect(); } //Return a named array with all data from object public function toArray() { $arr = array(); foreach($this as $key => $value) { $arr[$key] = $value; } return $arr; } } ?> |
A smooth sea never made a skilled sailor
goeie gok denk ik, want daar denk ik ook al een tijd aan, maar ik begrijp dan niet waarom hij perfect werkt in de onderliggende classeHuHu schreef op maandag 20 juli 2009 @ 21:17:
Ik gok op het foutief gebruik van $this, maar dat is maar een gokje.
A smooth sea never made a skilled sailor
{signature}
http://www.php.net/manual/en/language.oop5.visibility.phpVisibility
The visibility of a property or method can be defined by prefixing the declaration with the keywords: public, protected or private. Public declared items can be accessed everywhere. Protected limits access to inherited and parent classes (and to the class that defines the item). Private limits visibility only to the class that defines the item.
Ligt het hier niet aan? Aangezien de methode in de supertype gedefinieerd is.
[ Voor 7% gewijzigd door masq op 20-07-2009 21:51 ]
error_reporting(E_ALL);Voutloos schreef op maandag 20 juli 2009 @ 21:32:
En waar maak je de instance aan, waar hoe ziet de call naar toArray eruit? Is die niet stiekem static en negeer je een E_STRICT error, etc. etc.
de call is niet static, de instance maak ik gewoon in een functie
$blaat = new product;
$boe = $blaat->open(); //hier vult hij de properties in
$meuh = $blaat->toArray();
let er op dat het bij open() gewoon goed gaat (ik heb nl. gecheckt of ze ingevuld zijn)
A smooth sea never made a skilled sailor
lol, nee dat klopt nietVerwijderd schreef op maandag 20 juli 2009 @ 21:57:
product extends webshop... Een product is dus een webshop?
A smooth sea never made a skilled sailor
1
2
3
4
| foreach($this as $key => $value) { $arr[$key] = $value; } |
Vziw kun je niet zomaar een compleet object in een foreach statement stoppen. Als je dynamisch alle waarden van je object in een array wilt teruggeven, moet je een method gebruiken die alle variabelen ophaalt. Een voorbeeld daarvan is get_class_vars, ik zou daar eens naar kijken in de php manual.
Wat ik persoonlijk zou doen is een functie schrijven die dmv get_class_vars alle variabelen returned. Wanneer je de variabelen weet, kun je met het grootste gemak de bijbehorende waardes ophalen.
Jawel hoor, zie http://php.net/manual/en/language.oop5.iterations.phpRian schreef op maandag 20 juli 2009 @ 22:13:
Vziw kun je niet zomaar een compleet object in een foreach statement stoppen.
TS: Wat is de visibility van de class members? Anders valt er nog steeds niets nuttigs over te zeggen.
-Die error reporting zal ik eens aanzetten, post het zo ff
-@rian: ja dat kan wel, vandaar ook dat het binnen de class zelf wel werkt
A smooth sea never made a skilled sailor
Probeer het eens en leer er van.wboard schreef op dinsdag 21 juli 2009 @ 09:21:
-De visibility van de class members is PRIVATE, maar dat zou toch niet uit moeten maken als je een methode overerft??
{signature}
Verwijderd
Als je in je base class een member als private declareert, dan is dat member alleen visible voor die base class. Wil je echter dat de bewuste member visible blijft in de overervingsstructuur, dus in de derived classes van die base zul je ze als protected moeten declareren.wboard schreef op dinsdag 21 juli 2009 @ 09:21:
-De visibility van de class members is PRIVATE, maar dat zou toch niet uit moeten maken als je een methode overerft??
-Die error reporting zal ik eens aanzetten, post het zo ff
-@rian: ja dat kan wel, vandaar ook dat het binnen de class zelf wel werkt
Voorbeeld (C#, ik verwacht dat PHP hetzelfde zal doen
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
| namespace Inheritance { class Base { private string _myPrivateMember = string.Empty; protected string _myProtectedMember = string.Empty; public string _myPublicMember = string.Empty; public Base() { // alle 3 de members kunnen in deze constructor gezet worden _myPrivateMember = "private"; _myProtectedMember = "protected"; _myPublicMember = "public"; } } class Derived : Base { public Derived() { // alleen de protected en public kunnen in deze constructor gezet worden // de private member is dus niet zichtbaar voor deze class _myProtectedMember = "protected"; _myPublicMember = "public"; } } } |
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
Gozer... post dan een werkend voorbeeld waarmee het fout gaat. Alsof we kunnen ruiken of je class members public/protected/private zijn :{w.wboard schreef op dinsdag 21 juli 2009 @ 09:21:
-De visibility van de class members is PRIVATE, maar dat zou toch niet uit moeten maken als je een methode overerft??
-Die error reporting zal ik eens aanzetten, post het zo ff
-@rian: ja dat kan wel, vandaar ook dat het binnen de class zelf wel werkt
Hoewel HuHu het hiet wat lomp brengt heeft HuHu wel een punt: als je voorbeeld in de TS niet overeen komt met de werkelijke situatie dan kun je niet van ons verwachten dat we zinnige uitspraken kunnen doen. Zorg dus (voortaan) voor code die overeenkomt (of zelfs een 1:1 copy/paste is) met het daadwerkelijke probleem.HuHu schreef op dinsdag 21 juli 2009 @ 10:36:
[...]
Gozer... post dan een werkend voorbeeld waarmee het fout gaat. Alsof we kunnen ruiken of je class members public/protected/private zijn :{w.
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
A smooth sea never made a skilled sailor