paar kleine vraagjes (php)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robin stek

Robin stek

10/10/2019 14:23:02
Quote Anchor link
ik heb een vraag ik moet in de class batch dit maken maar ik kom er echt niet uit.

Deze moet ik laten returnen hebben jullie een idee hoe ik dat moet doen?


dit moet ik doen:
Public methods

getCircleFolder
Return de circle folder path.


getSquareFolder
Return de vierkant folder path.




hier staat mijn path:

[code­]

$upload_files[] = [

'square' => $destination . '/' . $_FILES['file']['name'][$i],
'circle' => $locatie . '/' . topng ($_FILES['file']['name'][$i])
];

[/code­]
 
PHP hulp

PHP hulp

04/12/2022 00:50:17
 
- Ariën  -
Beheerder

- Ariën -

10/10/2019 14:31:23
Quote Anchor link
Bekend met classes? Want ik zie weinig van je methods als code.
Maar met return kan je iets returnen.

Daarna moet je het zelf even echo'en of doorgeven aan een andere functie.
 
Robin stek

Robin stek

10/10/2019 14:58:40
Quote Anchor link
- Ariën - op 10/10/2019 14:31:23:
Bekend met classes? Want ik zie weinig van je methods als code.
Maar met return kan je iets returnen.

Daarna moet je het zelf even echo'en of doorgeven aan een andere functie.


ja ik moet een class maken op een andere file en dan moet ik daar de return uitvoeren om de folder path te returnen
 
Ozzie PHP

Ozzie PHP

10/10/2019 16:46:51
Quote Anchor link
Schoolopdracht?
 
Robin stek

Robin stek

10/10/2019 16:59:27
Quote Anchor link
Ozzie PHP op 10/10/2019 16:46:51:
Schoolopdracht?


nee voor iets wat ik aan het proberen ben
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/10/2019 18:31:26
Quote Anchor link
>> nee voor iets wat ik aan het proberen ben

Dat klinkt vaag...

Maar goed. Zie een class als een apart stukje programma, een zelfstandig ding wat gescheiden is van de rest van je applicatie. Het eerste wat je jezelf moet afvragen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Wat is de taak van de class die ik ga schrijven?


een heel erg simpele class zou er zo uit kunnen zien:

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
<?php

class Folder
{
    protected $path;
    
    // De constructor
    public function __construct($folder)
    {

        $this->setFolder($folder);
    }

    
    // getter
    function getPath() {
        return $this->path;
    }


    //setter
    function setPath($path) {
        $this->path = $path;
    }
}


// maak een nieuwe INSTANTIE van Folder aan
$circleFolder = new Folder(  $locatie . '/' . topng ($_FILES['file']['name'][$i])  );

// gebruik de METHOD getFolder()
echo $circleFolder->getPath();

// maak een tweede instantie aan
$squareFolder = new Folder(  $destination . '/' . $_FILES['file']['name'][$i]  );

// gebruik de METHOD getFolder()
echo $squareFolder->getPath();
?>

Zie de getter en setter als de bezorg- en afhaalbalie via de getters en setters communiceer je met je class. Zoals je ziet is $path protected. Deze kun je van buiten de class dan ook niet rechtstreeks lezen of schrijven. Je moet het dan dus wel via de getter en setter doen.

Een goed gebruik is om iedere class in een apart bestand te laten met dezelfde naam als de class heeft. de classnaam Folder zou dan dus in Folder.php opgeslagen worden.

Deze class heeft als enigste taak om het 'pad' te onthouden en is dus wel heel erg basic maar je kan de functionaliteit van de class uitbreiden. Het is wel handig als je iets leest over constructors en public/protected/private properties en methods.
Gewijzigd op 10/10/2019 18:36:02 door Frank Nietbelangrijk
 
Michael -

Michael -

10/10/2019 18:47:15
Quote Anchor link
Vervolg van dit topic

Hier gaf je nog aan dat het wel om huiswerk ging ;-) Heb je dit nu werkend?

En wat ik al aangaf, kies een taal. Ik zie locatie, destination, vierkant, square, etc. Hoe verwarrend wil je het maken?
Gewijzigd op 10/10/2019 18:49:20 door Michael -
 
Thomas van den Heuvel

Thomas van den Heuvel

10/10/2019 20:55:21
Quote Anchor link
@topicstarter
Ik snap de omschrijving van wat je probeert te bereiken niet. Het helpt ook niet dat de zinnen waarin je dit formuleert letterlijk kop noch staart hebben.

Is het de bedoeling dat je iets opsteekt van:
- verbanden tussen wiskundige figuren en hoe je dit tot iets object georiënteerds combineert (inheritance?)
- het uploaden van bestanden
- directorystructuren
- arrays
?

Het lijkt mij sterk dat je alles in 1x dient te combineren in één stuk code (of klasse), althans, ik zie niet hoe al deze componenten zich onderling verhouden. Ik denk ook dat het je meer helpt als je dit opdeelt in stukken, in plaats van dat je alles in 1x probeert te doen.

Met een class bundel je vaak een aantal samenhangende operaties tot één werkend geheel waarmee je dingen kunt doen. Ik zie niet helemaal wat de gemeenschappelijke noemer zou moeten zijn in het bovenstaande geheel, en volgens mij is het (dus) ook een combinatie van zaken, in plaats van één magische (gigantische?) klasse die alles doet. Dat is niet het idee van object georiënteerd programmeren.
 
Robin stek

Robin stek

16/10/2019 11:19:43
Quote Anchor link
Michael - op 10/10/2019 18:47:15:
Vervolg van dit topic

Hier gaf je nog aan dat het wel om huiswerk ging ;-) Heb je dit nu werkend?

En wat ik al aangaf, kies een taal. Ik zie locatie, destination, vierkant, square, etc. Hoe verwarrend wil je het maken?


yes het werkt nu allemaal maar nu wil ik wat beter worden en probeer ik dingen zelf uit



Toevoeging op 16/10/2019 11:20:12:

Frank Nietbelangrijk op 10/10/2019 18:31:26:
>> nee voor iets wat ik aan het proberen ben

Dat klinkt vaag...

Maar goed. Zie een class als een apart stukje programma, een zelfstandig ding wat gescheiden is van de rest van je applicatie. Het eerste wat je jezelf moet afvragen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Wat is de taak van de class die ik ga schrijven?


een heel erg simpele class zou er zo uit kunnen zien:

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
<?php

class Folder
{
    protected $path;
    
    // De constructor
    public function __construct($folder)
    {

        $this->setFolder($folder);
    }

    
    // getter
    function getPath() {
        return $this->path;
    }


    //setter
    function setPath($path) {
        $this->path = $path;
    }
}


// maak een nieuwe INSTANTIE van Folder aan
$circleFolder = new Folder(  $locatie . '/' . topng ($_FILES['file']['name'][$i])  );

// gebruik de METHOD getFolder()
echo $circleFolder->getPath();

// maak een tweede instantie aan
$squareFolder = new Folder(  $destination . '/' . $_FILES['file']['name'][$i]  );

// gebruik de METHOD getFolder()
echo $squareFolder->getPath();
?>

Zie de getter en setter als de bezorg- en afhaalbalie via de getters en setters communiceer je met je class. Zoals je ziet is $path protected. Deze kun je van buiten de class dan ook niet rechtstreeks lezen of schrijven. Je moet het dan dus wel via de getter en setter doen.

Een goed gebruik is om iedere class in een apart bestand te laten met dezelfde naam als de class heeft. de classnaam Folder zou dan dus in Folder.php opgeslagen worden.

Deze class heeft als enigste taak om het 'pad' te onthouden en is dus wel heel erg basic maar je kan de functionaliteit van de class uitbreiden. Het is wel handig als je iets leest over constructors en public/protected/private properties en methods.


bedankt dit heeft geholpen!


Toevoeging op 16/10/2019 11:25:39:

ik wil mijn .zip bestand in een mapje circles krijgen maar ik krijg deze error:https://ibb.co/RjCtP3w
wat heb ik fout gedaan?


mijn code
[code­]
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
<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

class Batch
{
    protected $id;

    // De constructor
    public function __construct($id)
    {

        $this->id = $id;
        return $this;
    }


    public function getCircleFolder()
    {

        return "circles/$this->id/";
    }


    public function getSquareFolder()
    {

        return "squares/$this->id/";
    }


    public function ensureFoldersExist()
    {

        createDirectory($this->getCircleFolder());
        createDirectory($this->getSquareFolder());
        return null;
    }


    public function toZip()
    {

        $this->ensureFoldersExist();
        $obj_zip = new ZipArchive();
        $result = $obj_zip->open($this->getCircleFolder().$this->id.".zip", (ZipArchive::CREATE | ZipArchive::OVERWRITE));
        if ($result != TRUE) {
            //print('Failed with code %d', $result)
        } else {
           $arr_options = array('add_path' => $this->getCircleFolder(), 'remove_all_path' => TRUE);
            $obj_zip->addGlob('*.png', GLOB_BRACE, $arr_options);
            $obj_zip->close();
        }
    }
}


[
/code]
 
- Ariën  -
Beheerder

- Ariën -

16/10/2019 11:32:07
Quote Anchor link
Je mag de foutmelding ook hier delen. Dan hebben andere er nog wat aan als de afbeelding verdwenen is, en dan blijft het forum ook meteen een goede kennisbank.

Ik zet in dat je een volledige pad moet gebruiken.
Gewijzigd op 16/10/2019 11:32:52 door - Ariën -
 
Robin stek

Robin stek

16/10/2019 12:00:16
Quote Anchor link
- Ariën - op 16/10/2019 11:32:07:
Je mag de foutmelding ook hier delen. Dan hebben andere er nog wat aan als de afbeelding verdwenen is, en dan blijft het forum ook meteen een goede kennisbank.

Ik zet in dat je een volledige pad moet gebruiken.


bij welke regel?
 
- Ariën  -
Beheerder

- Ariën -

16/10/2019 12:40:03
Quote Anchor link
Ik denk bij de open() method. Laat je error even zien hier anders via copy/paste.
Het is niet echt wenselijk en screenshots van foutmeldingen te plaatsen. Het is zeer onhandig.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/10/2019 20:50:25
Quote Anchor link
Robin fijn dat mijn voorbeeldje heeft geholpen.

Ik lees jouw code door en kom dit tegen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    // De constructor
    public function __construct($id)
    {

        $this->id = $id;
        return $this;
    }

?>


De regel met de return $this; mag je bij een constructor achterwege laten. De constructor kan namelijk geen waarde teruggeven. Zou het een normale functie zijn dan doe je de return $this; enkel als je "Method chaining" wilt gebruiken én je functie verder niets teruggeeft (zoals bij Setters het geval is). Bij method chaining kun je verschillende functies achter elkaar koppelen. zoals het voorbeeld hieronder:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$user

    ->setName('Jan Smit')
    ->
setBirthdate('31-12-1985')
    ->
setCity('Volendam')
;

?>

Doordat setName(), setBirthdate() en setCity() de instantie van de class teruggeven kan je meteen de volgende setter aanroepen. Zou dat niet zo zijn dan zou je er drie verschillende statements van moeten maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$user
->setName('Jan Smit');
$user->setBirthdate('31-12-1985');
$user->setCity('Volendam');
;

?>

Ik ben er ook niet helemaal zeker van of dit goed gaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
return "circles/$this->id/";
?>

Ik zou de variabelen buiten de string laten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
return 'circles/' . $this->id . '/';
?>
Gewijzigd op 16/10/2019 20:55:19 door Frank Nietbelangrijk
 



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.