paar kleine vraagjes (php)
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]
Maar met return kan je iets returnen.
Daarna moet je het zelf even echo'en of doorgeven aan een andere functie.
- 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.
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
Schoolopdracht?
Ozzie PHP op 10/10/2019 16:46:51:
Schoolopdracht?
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:
een heel erg simpele class zou er zo uit kunnen zien:
Code (php)
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
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();
?>
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
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?
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 -
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.
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?
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:
een heel erg simpele class zou er zo uit kunnen zien:
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.
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:
een heel erg simpele class zou er zo uit kunnen zien:
Code (php)
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
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();
?>
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)
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
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]
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 - 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.
Ik zet in dat je een volledige pad moet gebruiken.
bij welke regel?
Het is niet echt wenselijk en screenshots van foutmeldingen te plaatsen. Het is zeer onhandig.
Ik lees jouw code door en kom dit tegen:
Code (php)
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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$user
->setName('Jan Smit')
->setBirthdate('31-12-1985')
->setCity('Volendam')
;
?>
$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)
1
2
3
4
5
6
2
3
4
5
6
<?php
$user->setName('Jan Smit');
$user->setBirthdate('31-12-1985');
$user->setCity('Volendam');
;
?>
$user->setName('Jan Smit');
$user->setBirthdate('31-12-1985');
$user->setCity('Volendam');
;
?>
Ik ben er ook niet helemaal zeker van of dit goed gaat:
Ik zou de variabelen buiten de string laten:
Gewijzigd op 16/10/2019 20:55:19 door Frank Nietbelangrijk