abonnement Unibet Coolblue Bitvavo
pi_53313066
Ik heb een vraag over of bepaald gedrag van PHP nou een bug is of niet.

Het gedrag waar ik het over heb is als volgt:

Static lokale variabelen van een method worden tussen instanties van klasses gedeeld.

Ik vind dat zelf erg onlogisch. Laat ik er een beetje code bij gooien:

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
<?php
    
class foo {
        
        
public function bar($v '') {
            static 
$value;        
            if (!
$v) {
                return 
$value;
            }
            
            
$value $v;
            
            
// enz enz
        
        
}
    
    }
    
    
$henk = new foo();
    
$piet = new foo();

    
$henk->bar('Dit is een test');
    
$piet->bar('En dit is een tweede test');
    
    echo 
$henk->bar() . '<br>';
    echo 
$piet->bar();
    
    
/*
        Huidige Output:
        En dit is een tweede test
        En dit is een tweede test
        
        Naar mijn idee verwachte output:
        Dit is een test
        En dit is een tweede test
    
    */    
?>

Ik verwacht dat deze variabelen niet tussen instanties gedeeld zijn, omdat ik $value definieer als lokale variabelen van een method, niet als members van de klasse...

Is mijn verwachting nou verkeerd, of verwacht ik gewoon te veel van de OOP van php5?

[ Bericht 2% gewijzigd door Arjan321 op 19-09-2007 22:20:20 ]
pi_53321357
en wat nou als je er private van maakt?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_53322049
@Arjan321

Ik ben met je eens dat het enigzins onlogisch is. Maar waarom zou je in vredesnaam zo'n constructie gebruiken? Jouw static variabele is eigenlijk gewoon een class member. Zoals jij ze nu gebruikt zou je ze buiten OOP gebruiken, in losse functies bijvoorbeeld.
pi_53328975
quote:
Op donderdag 20 september 2007 10:35 schreef markiemark het volgende:
en wat nou als je er private van maakt?
Dan zou het huidige gedrag verwacht zijn.. Het zijn, vind ik, lokale variabelen van een method.
quote:
Op donderdag 20 september 2007 11:01 schreef JeRa het volgende:
@Arjan321

Ik ben met je eens dat het enigzins onlogisch is. Maar waarom zou je in vredesnaam zo'n constructie gebruiken?
Ik heb een class die het een en ander uitrekent / controleert (best zware berekeningen). Hij roept van al zijn members een method aan. De bedoeling was dan dat deze method zijn resultaat opslaat, zodat hij dat maar 1x hoeft te rekenen.. Ik kan het later dan direct opvragen. Doorgeslagen optimalisatie, wellicht.

Dit is natuurlijk deels uit luiheid om getX() functies te schrijven die het resultaat uit een private variabele exposen, maar het werkt op deze manier perfect, zolang je maar 1 instance hebt tenminste.

Ik ga denk ik maar het script aanpassen om __call() te overloaden.. Op die manier werken al die getX() functies automagisch..
quote:
Jouw static variabele is eigenlijk gewoon een class member. Zoals jij ze nu gebruikt zou je ze buiten OOP gebruiken, in losse functies bijvoorbeeld.
Ja precies. Ik zou helemaal met dit gedrag eens zijn, als ik de variabele gedeclareerd zou hebben als een class member.. wat ik, naar mijn inziens, niet doe..
pi_53330394
quote:
Op donderdag 20 september 2007 15:28 schreef Arjan321 het volgende:
Ik heb een class die het een en ander uitrekent / controleert (best zware berekeningen). Hij roept van al zijn members een method aan. De bedoeling was dan dat deze method zijn resultaat opslaat, zodat hij dat maar 1x hoeft te rekenen.. Ik kan het later dan direct opvragen. Doorgeslagen optimalisatie, wellicht.
Of het wel of niet doorgeslagen is maakt niet zoveel uit, het gaat erom dat het niet doet wat je ervan verwacht. Ik kan het denk ik wel verklaren; de methodes van een object zijn de methodes van een class en alleen voor de class members wordt bij een nieuw object geheugen vrijgemaakt om gegevens op te slaan.

Static variabelen in een functie zijn zichtbaar voor en blijven in de scope van die functie zolang de functie blijft bestaan. Aangezien je zodra je een class definieert ook de functies aanmaakt, heb je maar één static variabele voor alle instanties van die class.

Hoe het in C/C++ en andere talen werkt weet ik niet, maar dit lijkt me de meest logische verklaring. Maar wat is er mis met deze methode, welke ik persoonlijk niet eens lelijk vind?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Vector
{
    
private $cacheWaarde false;

    
public function getWaarde()
    {
        if (
$this->cacheWaarde !== false)
        {
            return 
$this->cacheWaarde;
        }
        
$this->cacheWaarde sin(.2);
        return 
$this->cacheWaarde;
    }
}
?>
pi_53331611
quote:
Op donderdag 20 september 2007 16:15 schreef JeRa het volgende:

[..]

Of het wel of niet doorgeslagen is maakt niet zoveel uit, het gaat erom dat het niet doet wat je ervan verwacht. Ik kan het denk ik wel verklaren; de methodes van een object zijn de methodes van een class en alleen voor de class members wordt bij een nieuw object geheugen vrijgemaakt om gegevens op te slaan.

Static variabelen in een functie zijn zichtbaar voor en blijven in de scope van die functie zolang de functie blijft bestaan. Aangezien je zodra je een class definieert ook de functies aanmaakt, heb je maar één static variabele voor alle instanties van die class.

Hoe het in C/C++ en andere talen werkt weet ik niet, maar dit lijkt me de meest logische verklaring. Maar wat is er mis met deze methode, welke ik persoonlijk niet eens lelijk vind?
[ code verwijderd ]
ANSI-C is uiteraard snel te zeggen, die ondersteund geen klasses.. heerlijke tijden Ik heb het eventjes getest in C++, en die heeft het zelfde gedrag als PHP.

Die oplossing is inderdaad dan de werkende oplossing. Nadeel daarvan is dat de method dan op de hoogte moet zijn van welke member hij controleert. En dat is extra typwerk, danwel aanpaswerk als er een nieuwe method bij komt.

Of is PHP pienter genoeg om te zeggen in welke method hij zit? Dat zou handig zijn
pi_53337313
Ik heb een probleempje met het uitlezen van data uit een xml bestand. Het XML bestand is als volgt:

1
2
3
4
5
6
7
8
<Verwachting dagnaam="vrijdag" dag="21" maandnaam="september" maand="9" jaar="2007" datum="20070921">
<minimumtemperatuur>14</minimumtemperatuur>
<maximumtemperatuur>20</maximumtemperatuur>
<windrichting>zw</windrichting>
<windsnelheid>3-5</windsnelheid>
<weersymbool>C</weersymbool>
<weersomschrijving>zwaar bewolkt</weersomschrijving>
</Verwachting>


En dat dan 5 keer. Al wil ik echter met de volgende code de data eruit halen dan werkt het niet: (in de code staat nu een teller , en die telt er maar 1 ipv 5.)

1
2
3
4
5
6
7
8
9
   $inhoud = file_get_contents($vijfdaags);
   $inhoud = explode('<verwachting>', $inhoud);
   $teller = 0;
   foreach($inhoud as $verwachting) {
   
   $teller++;
   
   }
   echo $teller;


Weet iemand wat het probleem is? Ik denk zelf omdat er ook de dag en maand enz. in de <verwachting> tag staat. Hoe los ik dit op?
  donderdag 20 september 2007 @ 20:39:52 #108
32768 DionysuZ
Respect my authority!
pi_53338046
quote:
Op donderdag 20 september 2007 20:14 schreef broodmonkeh het volgende:
Ik heb een probleempje met het uitlezen van data uit een xml bestand. Het XML bestand is als volgt:
[ code verwijderd ]

En dat dan 5 keer. Al wil ik echter met de volgende code de data eruit halen dan werkt het niet: (in de code staat nu een teller , en die telt er maar 1 ipv 5.)
[ code verwijderd ]

Weet iemand wat het probleem is? Ik denk zelf omdat er ook de dag en maand enz. in de <verwachting> tag staat. Hoe los ik dit op?
Op die manier gaat het inderdaad niet lukken. Ten eerste staat er een hoofdletter in het begin van Verwachting en ten tweede staat er meer info in. Explode werkt met exact strings. Met PHP kun je xml parsen. http://nl3.php.net/xml
□ Reality is merely an illusion,albeit a very persistent one-A.Einstein
■ Of ik ben gek of de rest van de wereld.Ik denk zelf de rest van de wereld-Rudeonline
□ The war is not meant to be won.It is meant to be continuous-G.Orwell
  vrijdag 21 september 2007 @ 21:12:01 #109
37634 wobbel
Da WoBBeL King
pi_53366685
Ik heb een tabel Winamp_Tracks waarin alle tracks staan die ik in Winamp heb.

De tabel Winamp_History geeft aan welke nummers ik allemaal gespeeld heb incl. de datum


Winamp_Tracks
1 - K3 - Oya LeLe
2 - Bob Sinclar - w00t
3 - Peter Gelderblom - Waiting 4


Winamp_History
1 - 1 - 10035235
2 - 3 - 100357837
3 - 1 - 10035375
4 - 3 - 100321295
5 - 2 - 10033242
6 - 3 - 10033206

Nu wil ik dus een query zodat ik onderstaande lijstje kan krijgen

K3 Oya LeLe - 2 keer afgespeeld
Bob Sinclaar w00t - 1 keer afgespeeld
Peter Gelderblom waiting 4 - 3 keer afgespeeld

Ik heb btw al onderstaande, maar klopt niet

1SELECT t.Artist, t.Title, COUNT(h.IdHistory) as Winamp_History FROM Winamp_Tracks n LEFT JOIN Winamp_History v ON h.IdHistory
pi_53368336
zoiets?

SELECT t.Artist, t.Title, COUNT(h.IdHistory) as aantal FROM Winamp_Tracks t LEFT JOIN Winamp_History h ON h.song_id = t.song_id

Je geeft de inhoud terwijl de database layout zinvoller was
pi_53368859
Je moet ook nog een GROUP BY toevoegen voor alle kolommen in die in de SELECT staan maar waar geen agregate functie (zoals count()) op staat.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_53381410
Ik heb een leuk berekenings vraagje

Voor een site wil ik gaan werken met een template voor afbeeldingen. Deze template is alleen de 'border' rondom het plaatje. Nu heeft deze rare maten.

normaal = 121 x 92
klein = 92 x 69

Hoe kan ik zorgen dat alle afbeeldingen er juist in komen te staan qua verkleining? anyone?

ps en dan voor te stellen dat een afbeelding bv

640x480
800x600
1024x800
etc zijn?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  zaterdag 22 september 2007 @ 15:21:19 #113
37634 wobbel
Da WoBBeL King
pi_53381529
quote:
Op zaterdag 22 september 2007 15:15 schreef Chandler het volgende:
Ik heb een leuk berekenings vraagje

Voor een site wil ik gaan werken met een template voor afbeeldingen. Deze template is alleen de 'border' rondom het plaatje. Nu heeft deze rare maten.

normaal = 121 x 92
klein = 92 x 69

Hoe kan ik zorgen dat alle afbeeldingen er juist in komen te staan qua verkleining? anyone?

ps en dan voor te stellen dat een afbeelding bv

640x480
800x600
1024x800
etc zijn?
dan moet je de verhouding uitrekenen en daarmee kan je alles herberekenen.
pi_53382368
quote:
Op zaterdag 22 september 2007 15:15 schreef Chandler het volgende:
Ik heb een leuk berekenings vraagje

Voor een site wil ik gaan werken met een template voor afbeeldingen. Deze template is alleen de 'border' rondom het plaatje. Nu heeft deze rare maten.

normaal = 121 x 92
klein = 92 x 69

Hoe kan ik zorgen dat alle afbeeldingen er juist in komen te staan qua verkleining? anyone?

ps en dan voor te stellen dat een afbeelding bv

640x480
800x600
1024x800
etc zijn?
Met bijvoorbeeld PHPThumb de afbeeldingen herschalen en automatisch het overtollige gedeelte laten wegsnijden.
pi_53383900
Ja maar overtollig is niet altijd handig hé.

Ik heb even wat voorbeelden gemaakt.


.

.

.

.

.

.

.


maar vind vooral afbeelding 2 en 4 niet mooi. Wanneer ik ga snijden in deze foto's ziet het er helemaal niet meer uit juist omdat de afbeeldingen dan echt een groot stuk missen

ps, ik ben niet een van de gozerts op deze afbeeldingen echt niet

[ Bericht 3% gewijzigd door Chandler op 22-09-2007 17:20:25 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_53384986
Met PHPThumb kun je alles (!) op het gebied van afbeeldingen bewerken.

Je kunt dus ook de afbeelding zo herschalen dat 'ie binnen het frame past (met vervorming), schalen totdat 'ie in het frame past en overtollige gedeelten laten wegvallen of schalen totdat 'ie in het frame past en de overgebleven ruimte opvullen met een vaste kleur of transparatie (indien GIF).

Bekijk de demo pagina maar eens: http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php

Vooral voorbeelden 17, 19, 22 en 23 zijn wel interessant voor je denk ik.
  zondag 23 september 2007 @ 10:48:55 #117
159979 G.Fawkes
Libera eas de ore leonis!
pi_53400373
Ik gebruik wamp om torrentflux te gebruiken. Nu moet er buiten de www map weggeschreven worden. En omdat die waarschijnlijk niet kan, krijg ik deze foutmeldingen:

1
2
3
4
5
6
7
Warning: mkdir() [function.mkdir]: Invalid argument in C:wwwtorrentfluxfunctions.php on line 865

Warning: disk_total_space() [function.disk-total-space]: The filename, directory name, or volume label syntax is incorrect. in C:wwwtorrentfluxfunctions.php on line 874

Warning: disk_free_space() [function.disk-free-space]: The filename, directory name, or volume label syntax is incorrect. in C:wwwtorrentfluxfunctions.php on line 875

Warning: Division by zero in C:wwwtorrentfluxfunctions.php on line 878


Ik heb geprobeerd om via windows verkenner de read-only rights weg te halen maar daar heeft het blijkbaar niet veel mee te maken...
pi_53400582
quote:
Op zaterdag 22 september 2007 15:15 schreef Chandler het volgende:
Ik heb een leuk berekenings vraagje

Voor een site wil ik gaan werken met een template voor afbeeldingen. Deze template is alleen de 'border' rondom het plaatje. Nu heeft deze rare maten.

normaal = 121 x 92
klein = 92 x 69

Hoe kan ik zorgen dat alle afbeeldingen er juist in komen te staan qua verkleining? anyone?

ps en dan voor te stellen dat een afbeelding bv

640x480
800x600
1024x800
etc zijn?
Er zijn allerlei libs verkrijgbaar om afbeeldingen op deze gewenste manier te bewerken, maar je kunt het zelf ook vrij eenvoudig doen met behulp van de standaard GD2 functies. Het komt er dan op neer dat je de afbeelding verkleind en eventueel de gewenste uitsnede maakt.
pi_53401274
quote:
Op zaterdag 22 september 2007 17:14 schreef Chandler het volgende:
Ja maar overtollig is niet altijd handig hé.

Ik heb even wat voorbeelden gemaakt.

[afbeelding]
.
[afbeelding]
.
[afbeelding]
.
[afbeelding]
.
[afbeelding]
.
[afbeelding]
.
[afbeelding]
.
[afbeelding]

maar vind vooral afbeelding 2 en 4 niet mooi. Wanneer ik ga snijden in deze foto's ziet het er helemaal niet meer uit juist omdat de afbeeldingen dan echt een groot stuk missen

ps, ik ben niet een van de gozerts op deze afbeeldingen echt niet
Ja, maar daar is vrij weinig aan te doen als je alle thumbs in landscape wilt hebben. Je zou de portrait-foto's zo kunnen snijden dat ze als landscape-thumb te zien worden, maar dan zul je onder en boven veel moeten wegknippen. Bij sommige foto's geen probleem, bij andere weer niet.
pi_53401368
quote:
Op zondag 23 september 2007 10:48 schreef G.Fawkes het volgende:
Ik gebruik wamp om torrentflux te gebruiken. Nu moet er buiten de www map weggeschreven worden. En omdat die waarschijnlijk niet kan, krijg ik deze foutmeldingen:
[ code verwijderd ]

Ik heb geprobeerd om via windows verkenner de read-only rights weg te halen maar daar heeft het blijkbaar niet veel mee te maken...
Volgens mij heeft het niets met rechten te maken, in windows heb je vrijwel alle rechten (behalve indien anders ingesteld) om te schrijven.

(simpel te testen door via een php bestand een map oid proberen aan te maken)
  zondag 23 september 2007 @ 13:27:26 #121
84926 WyriHaximus
Release the hounds smithers!
pi_53403634
quote:
Op zondag 23 september 2007 10:48 schreef G.Fawkes het volgende:
Ik gebruik wamp om torrentflux te gebruiken. Nu moet er buiten de www map weggeschreven worden. En omdat die waarschijnlijk niet kan, krijg ik deze foutmeldingen:
[ code verwijderd ]

Ik heb geprobeerd om via windows verkenner de read-only rights weg te halen maar daar heeft het blijkbaar niet veel mee te maken...
Heb je de config van torenflux aangepast? Of post hem hier ff .
phluphy for president!
  zondag 23 september 2007 @ 15:02:56 #122
62215 qu63
..de tijd drinkt..
pi_53406284
Mijn script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
for ($i 1$i <= 1$i++) {
//De pagina openen
$handle file_get_contents("http://www.queenconcerts.com/detail/live/".$i."/");
//De titel opzoeken
preg_match_all('/<caption>(.*?)</caption>/'$handle $matches);
//De : uit de titel halen en vervangen omdat Windows zeurt
$filename preg_replace('/:/',' =',$matches[0][0]);
//Inhoud wegschrijven naar bestand
fwrite($matches[0][0].".html"file_get_contents("http://www.queenconcerts.com/detail/live/".$i."/"));
//Link sluiten
fclose($handle);
}
?>


Mijn foutmeldingen:
1
2
3
Warning: fwrite(): supplied argument is not a valid stream resource in C:webwwwhomequ63Queenconcertsindex.php on line 10

Warning: fclose(): supplied argument is not a valid stream resource in C:webwwwhomequ63Queenconcertsindex.php on line 12


Wat klopt er dan niet?
It's Time To Shine
[i]What would life be like without rhethorical questions?[/i]
  zondag 23 september 2007 @ 15:06:38 #123
84926 WyriHaximus
Release the hounds smithers!
pi_53406373
quote:
Op zondag 23 september 2007 15:02 schreef qu63 het volgende:
Mijn script:
[ code verwijderd ]

Mijn foutmeldingen:
[ code verwijderd ]

Wat klopt er dan niet?
Lees deze eens door .:
http://nl3.php.net/fopen
http://nl3.php.net/fwrite
http://nl3.php.net/fclose
phluphy for president!
  zondag 23 september 2007 @ 15:24:25 #124
62215 qu63
..de tijd drinkt..
pi_53407052
quote:
Dat had ik al gedaan, toen kwam ik er niet meer uit en probeerde ik het hier
It's Time To Shine
[i]What would life be like without rhethorical questions?[/i]
pi_53407170
quote:
Op zondag 23 september 2007 15:02 schreef qu63 het volgende:
Mijn script:
[ code verwijderd ]

Mijn foutmeldingen:
[ code verwijderd ]

Wat klopt er dan niet?
In ieder geval klopt de $handle variabele niet. Fclose() verwacht een file handle, maar file_get_contents() geeft geen file handle terug, maar een string. Waarschijnlijk heeft ook de fout met fwrite() hier mee te maken.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')