Beste php leden,

Dit is mss een simple vraag maar dit wil mij niet lukken. Ik heb een php file van Jwplayer met code die is opgebouwd uit classes en functions. Nu probeer ik enkele variables op te roepen door gebruik te maken van include. Hoe kan ik een variable in een functie oproepen om te gebruiken in een ander php bestand?

Vb van hoe de code is opgebouwd:
https://svn.wikia-code.com/wikia/trunk/extensions/wikia/JWPlayer/JWPlayer.class.php

Alvast bedankt.
Sofian, je zult je iets moeten verdiepen in de werking van classes of wel "Object oriented programming" kortweg OOP.

De variabelen in de class staan protected hetgeen wil zeggen dat je er niet rechtstreeks bij kunt. Je kunt of een nieuwe class maken die class JWPlayer gaat uitbreiden met het keyword extend of je zult gebruik moeten maken van de bestaande functies die bij die class aangeleverd zijn. Ik zal je een klein voorbeeld geven van een eigen class die alles van class JWPlayer overerft:

<?php
include 'JWPlayer.php';

// deze class erft alles van de class JWPlayer
class myclass extends JWPlayer {

// dit wordt dan dus een extra functie van de class JWPlayer
public function initialize() {

// met this verwijs je naar de eigen class. $title is een protected class variabele
// van de class JWPlayer die we nu een andere waarde gaan geven.
$this->title = 'mijn eigen titel';
}

};

// om een class te gebuiken moeten we eerst een instantie er van in het geheugen laden
$player = new myclass();
// we roepen onze eigen gemaakte functie nu aan. deze functie is nu een uitbreiding op het geheel
$player->initialize();

?>
Frank, bedankt voor de uitleg. Dat maakt een en ander al veel duidelijker. Ik vrees toch dat ik mij wat meer moet verdiepen in php om dit beter te kunnen verstaan. Ik dacht dat het oproepen van functies in classes te vergelijken was met C++. In mijn php file zie ik dat er niet gebruik wordt gemaakt van public of protected maar gewoon function. Wat is het verschil tussen public function en function? Is er geen simpelere manier te bedenken om deze variables te kunnen oproepen?

een 'function' binnen een class is hetzelfde als een 'public function'. Het werken met classes is zeker te vergelijken met c++ maar er zijn wel syntax verschillen.

c++:

class {
public:
function dosomething() {}
protected:
function dosomethingelse() {}
}:

PHP:

class {
public function dosomething() {}
protected function dosomething() {}
};
Sofian, public function en function zijn het zelfde. function is alleen een oude methode om een method aan te duiden, sindsdien hebben we visibility keywords erbij gekregen (public, protected en private). Aangezien je C++ kent ken je deze begrippen waarschijnlijk ook wel.

De properties, variabele, van een klasse zijn in jou geval allemaal protected. Dat betekend dat je ze niet vanuit de buitenkant kan benaderen, maar wel vanuit een extended klasse. Je zult dus de klasse moeten extenden en een speciale getter maken. Dat is in elk geval wat ik uit je vraag opmaak.
je kunt het JWPlayer script aanpassen maar ik moet je dat toch sterk afraden om twee redenen.

- er kunnen bugs ontstaan
- als er een update voor JWPlayer komt dan moet je weer in dat bestand gaan knoeien en maak je weer
kans op bugs
Frank, ik zou hem gewoon extenden en er een getter bij plakken:
<?php
class MyPlayer extends JWPlayer
{
public function getFoo()
{
return $this->foo;
}
}
?>
Ja ik ook wouter, ik had dat reeds voorgesteld en een voorbeeld gegeven
Frank, ah dan had ik jou code voorbeeld in de snelheid niet helemaal goed begrepen.
De properties, variabele, van een klasse zijn in jou geval allemaal protected.
De code die ik gebruik is in een joomla website i.p.v de functions binnen deze class protected of public te zetten staan deze allemaal in functions. Maar er staat deze regel bij JEXEC. De code bevat bijna 900 regels en er is maar 1 function van deze class die ik nodig heb. Ben zelf nog wat aan het lezen want veel van dit is nog nieuw voor mij.

Je zult dus de klasse moeten extenden en een speciale getter maken.
Dit is alleen wanneer de function protected is? Hoe werkt dit dan als je een public function wilt gebruiken?

Reageren