stopwatch
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
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
Gewijzigd op 14/10/2013 09:03:47 door Dirk Renes
Je laat alleen een lege class zien en meldt dat je er niet uit komt, maar ik heb geen idee waar je vast loopt.
Ik wil graag een stopwatch maken. met deze class. alleen ik weet totaal niet waar en hoe ik moet beginnen. Wie kan mij een eindje op weg helpen hoe ik die class moet gaan schrijven?
Weet je al hoe je het in procedureel PHP (zonder classes) moet maken?
Ik snap niet goed hoe jij dit in php wil doen. Je gaat toch geen 1 keer per seconde contact zoeken met de server?
Of leg eens uit hoe je denkt dat het eindresultaat zou kunnen zijn.
Toevoeging op 14/10/2013 10:30:12:
Is het geen timer om te kijken hoe lang een bepaald script over het laden doet?
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
interface IStopwatch
{
public function start();
public function stop();
public function lap();
}
class Stopwatch implements IStopwatch
{
private $time; // DateTime object
private $running; // true of false
// constructor, wordt automatisch aangeroepen als de class geïnstantieerd wordt
function __construct()
{
session_start();
// standaard waardes: stopwatch uit, time = de huidige tijd
$this->running = false;
$this->time = new DateTime('now');
// indien er een tijd in de sessie wordt aangetroffen neem deze dan over
if(isset($_SESSION['start_time']))
{
$this->time->setTimestamp($_SESSION['start_time']);
$this->running = true;
}
}
public function start()
{
// verwijder netjes het oude DateTime object
unset($this->time);
// maak een nieuw DateTime object aan met de huidige tijd en sla die op in $_SESSION['start_time']
$this->time = new DateTime('now');
$this->running = true;
$_SESSION['start_time'] = $this->time->getTimestamp();
}
public function stop()
{
// gebruik onze eigen functie lap() om de tijd te registeren en zet running op false
$timetext = $this->lap();
$this->running = false;
// verwijder de sessie variabele
unset($_SESSION['start_time']);
// geef te stoptijd terug
return $timetext;
}
public function lap()
{
// stopwatch uit? return false
if(!$this->running)
return false;
// anders verschil berekenen tussen de huidige tijd en de starttijd en deze teruggeven als string
$interval = $this->time->diff(new DateTime('now'));
return $interval->format('%h:%i:%s');
}
public function isRunning()
{
// laat weten of de stopwatch loopt ja of nee
return $this->running;
}
}
$stopwatch = new Stopwatch();
// indien het formulier terug gestuurd wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//er is op start gedrukt
if(isset($_POST['start']))
{
$stopwatch->start();
echo 'stopwatch running ';
}
//er is op stop gedrukt
if(isset($_POST['stop']))
{
if($stoptime = $stopwatch->stop())
echo 'stoptime: ' . $stoptime;
else
echo 'stopwatch not running';
}
//er is op lap gedrukt
if(isset($_POST['lap']))
{
if($laptime = $stopwatch->lap())
echo 'time: ' . $laptime;
else
echo 'stopwatch not running';
}
}
?>
<form action="" method="post" >
<input type="submit" name="start" value="Start" />
<input type="submit" name="stop" value="Stop" />
<input type="submit" name="lap" value="Lap" />
</form>
interface IStopwatch
{
public function start();
public function stop();
public function lap();
}
class Stopwatch implements IStopwatch
{
private $time; // DateTime object
private $running; // true of false
// constructor, wordt automatisch aangeroepen als de class geïnstantieerd wordt
function __construct()
{
session_start();
// standaard waardes: stopwatch uit, time = de huidige tijd
$this->running = false;
$this->time = new DateTime('now');
// indien er een tijd in de sessie wordt aangetroffen neem deze dan over
if(isset($_SESSION['start_time']))
{
$this->time->setTimestamp($_SESSION['start_time']);
$this->running = true;
}
}
public function start()
{
// verwijder netjes het oude DateTime object
unset($this->time);
// maak een nieuw DateTime object aan met de huidige tijd en sla die op in $_SESSION['start_time']
$this->time = new DateTime('now');
$this->running = true;
$_SESSION['start_time'] = $this->time->getTimestamp();
}
public function stop()
{
// gebruik onze eigen functie lap() om de tijd te registeren en zet running op false
$timetext = $this->lap();
$this->running = false;
// verwijder de sessie variabele
unset($_SESSION['start_time']);
// geef te stoptijd terug
return $timetext;
}
public function lap()
{
// stopwatch uit? return false
if(!$this->running)
return false;
// anders verschil berekenen tussen de huidige tijd en de starttijd en deze teruggeven als string
$interval = $this->time->diff(new DateTime('now'));
return $interval->format('%h:%i:%s');
}
public function isRunning()
{
// laat weten of de stopwatch loopt ja of nee
return $this->running;
}
}
$stopwatch = new Stopwatch();
// indien het formulier terug gestuurd wordt
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
//er is op start gedrukt
if(isset($_POST['start']))
{
$stopwatch->start();
echo 'stopwatch running ';
}
//er is op stop gedrukt
if(isset($_POST['stop']))
{
if($stoptime = $stopwatch->stop())
echo 'stoptime: ' . $stoptime;
else
echo 'stopwatch not running';
}
//er is op lap gedrukt
if(isset($_POST['lap']))
{
if($laptime = $stopwatch->lap())
echo 'time: ' . $laptime;
else
echo 'stopwatch not running';
}
}
?>
<form action="" method="post" >
<input type="submit" name="start" value="Start" />
<input type="submit" name="stop" value="Stop" />
<input type="submit" name="lap" value="Lap" />
</form>
Gewijzigd op 14/10/2013 10:34:06 door Frank Nietbelangrijk
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<script>
var controls = new Object();
window.onload = function() {
controls.h = document.getElementById('h');
controls.m = document.getElementById('m');
controls.s = document.getElementById('s');
controls.c = document.getElementById('c');
controls.start = document.getElementById('start');
controls.lap = document.getElementById('lap');
controls.reset = document.getElementById('reset');
controls.lapDisplay = document.getElementById('lap_display');
controls.time = 0; // in centi seconds
controls.state = 'idle'; // idle or running
controls.laps = Array();
controls.start.onclick = function() {
if (controls.state == 'running') {
controls.state = 'idle';
}
else {
controls.state = 'running';
}
start_stop();
}
controls.lap.onclick = function() {
displayLap();
}
controls.reset.onclick = function() {
controls.time = 0;
controls.lapDisplay.innerHTML = '';
display();
}
function start_stop() {
if (controls.state == 'running') {
setTimeout(start_stop, 10);
}
display();
controls.time++;
}
function display() {
controls.c.value = centiseconds2time(controls.time, 'c');
controls.s.value = centiseconds2time(controls.time, 's');
controls.m.value = centiseconds2time(controls.time, 'm');
controls.h.value = centiseconds2time(controls.time, 'h');
}
function displayLap() {
controls.lapDisplay.innerHTML += '<p><span class="h">' + centiseconds2time(controls.time, 'h') + '</span>:<span class="m">' + centiseconds2time(controls.time, 'm') + '</span>:<span class="s">' + centiseconds2time(controls.time, 's') + '</span>.<span class="c">' + centiseconds2time(controls.time, 'c') + '</span></p>';
}
function centiseconds2time(time, format) {
switch (format) {
case 'c':
var result = time % 100;
break;
case 's':
var rest = (time - (time % 100)) / 100;
var result = (rest % 60);
break;
case 'm':
var rest = (time - (time % 6000)) / 6000;
var result = (rest % 60);
break;
case 'h':
var rest = (time - (time % 360000)) / 360000;
var result = (rest % 60);
break;
}
return result;
}
}
</script>
<style>
#stopwatch input {
width: 55px;
}
</style>
<div id="stopwatch">
<input id="h">
<input id="m">
<input id="s">
<input id="c">
<input type="button" id="start" value="START">
<input type="button" id="reset" value="RESET">
<input type="button" id="lap" value="LAP">
<div id="lap_display"></div>
</div>
var controls = new Object();
window.onload = function() {
controls.h = document.getElementById('h');
controls.m = document.getElementById('m');
controls.s = document.getElementById('s');
controls.c = document.getElementById('c');
controls.start = document.getElementById('start');
controls.lap = document.getElementById('lap');
controls.reset = document.getElementById('reset');
controls.lapDisplay = document.getElementById('lap_display');
controls.time = 0; // in centi seconds
controls.state = 'idle'; // idle or running
controls.laps = Array();
controls.start.onclick = function() {
if (controls.state == 'running') {
controls.state = 'idle';
}
else {
controls.state = 'running';
}
start_stop();
}
controls.lap.onclick = function() {
displayLap();
}
controls.reset.onclick = function() {
controls.time = 0;
controls.lapDisplay.innerHTML = '';
display();
}
function start_stop() {
if (controls.state == 'running') {
setTimeout(start_stop, 10);
}
display();
controls.time++;
}
function display() {
controls.c.value = centiseconds2time(controls.time, 'c');
controls.s.value = centiseconds2time(controls.time, 's');
controls.m.value = centiseconds2time(controls.time, 'm');
controls.h.value = centiseconds2time(controls.time, 'h');
}
function displayLap() {
controls.lapDisplay.innerHTML += '<p><span class="h">' + centiseconds2time(controls.time, 'h') + '</span>:<span class="m">' + centiseconds2time(controls.time, 'm') + '</span>:<span class="s">' + centiseconds2time(controls.time, 's') + '</span>.<span class="c">' + centiseconds2time(controls.time, 'c') + '</span></p>';
}
function centiseconds2time(time, format) {
switch (format) {
case 'c':
var result = time % 100;
break;
case 's':
var rest = (time - (time % 100)) / 100;
var result = (rest % 60);
break;
case 'm':
var rest = (time - (time % 6000)) / 6000;
var result = (rest % 60);
break;
case 'h':
var rest = (time - (time % 360000)) / 360000;
var result = (rest % 60);
break;
}
return result;
}
}
</script>
<style>
#stopwatch input {
width: 55px;
}
</style>
<div id="stopwatch">
<input id="h">
<input id="m">
<input id="s">
<input id="c">
<input type="button" id="start" value="START">
<input type="button" id="reset" value="RESET">
<input type="button" id="lap" value="LAP">
<div id="lap_display"></div>
</div>
Hij moet hetzelfde doen als een stopwatch die je fysiek kan gebruiken doet.
Als ik je nu vertel dat PHP op de webserver draait en niet in de browser, en dat een php-script normaal gesproken een aantal milliseconden draait (voordat jij je webpagina te zien krijgt).
wat dan? Misschien toch maar javascript?
Frank Nietbelangrijk op 14/10/2013 13:56:40:
Kijk Dirk daar zat ik op te wachten.
Als ik je nu vertel dat PHP op de webserver draait en niet in de browser, en dat een php-script normaal gesproken een aantal milliseconden draait (voordat jij je webpagina te zien krijgt).
wat dan? Misschien toch maar javascript?
Tis puur om wat te leren omtrent clases. Ik snap dat het dan niet handig is.
Als ik je nu vertel dat PHP op de webserver draait en niet in de browser, en dat een php-script normaal gesproken een aantal milliseconden draait (voordat jij je webpagina te zien krijgt).
wat dan? Misschien toch maar javascript?
Tis puur om wat te leren omtrent clases. Ik snap dat het dan niet handig is.
Maak een gastenboek in classes bijv.
Zoek een voorbeeld dat past bij het medium.
Php werkt enkel wanneer de gebruiker ergens op klikt en de pagina wordt ververst.
Als het gaat om bewegende beelden; interactie tussen de cursor en de site; ... dingen die moeten veranderen zonder enige muisklicks ...
dan heb je javascript nodig.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
interface IStopwatch
{
public function start();
public function stop();
public function lap();
}
class Stopwatch implements IStopwatch
{
private $startTime;
private $isRunning;
private $stopTime;
function __construct()
{
// standaard waardes: stopwatch uit dan geeft hij de huidige tijd weer.
//standaard staat stopwatch uit en gebruikt die dus huidige tijd dat is dus 0:0:0
$this->isRunning = false;
$this->time = microtime(true);
$this->isRunning = true;
}
public function start()
{
unset($this->time);
$this->startTime = microtime('now');
$this->isRunning = true;
}
public function stop()
{
$this->stopTime = microtime('now');
$timeview = $this->lap();
$this->isRunning = false;
$timeview->startTime - $stopTime;
}
public function lap()
{
if(!$this->isRunning)//als $this niet gelijk is aan running dan krijg je een false terug
return false;
$timenow = $this->time = microtime('now');
$interval = $this->time = microtime(true);
}
}
$stopwatch = new Stopwatch();
//stopwatch word gestart
if($stopwatch->start())
echo 'stopwatch loopt nu';
//er is op stop gedrukt
if($stoptime = $stopwatch->stop())
echo 'stoptime: ' . $stoptime;
else
echo 'stopwatch loopt niet';
interface IStopwatch
{
public function start();
public function stop();
public function lap();
}
class Stopwatch implements IStopwatch
{
private $startTime;
private $isRunning;
private $stopTime;
function __construct()
{
// standaard waardes: stopwatch uit dan geeft hij de huidige tijd weer.
//standaard staat stopwatch uit en gebruikt die dus huidige tijd dat is dus 0:0:0
$this->isRunning = false;
$this->time = microtime(true);
$this->isRunning = true;
}
public function start()
{
unset($this->time);
$this->startTime = microtime('now');
$this->isRunning = true;
}
public function stop()
{
$this->stopTime = microtime('now');
$timeview = $this->lap();
$this->isRunning = false;
$timeview->startTime - $stopTime;
}
public function lap()
{
if(!$this->isRunning)//als $this niet gelijk is aan running dan krijg je een false terug
return false;
$timenow = $this->time = microtime('now');
$interval = $this->time = microtime(true);
}
}
$stopwatch = new Stopwatch();
//stopwatch word gestart
if($stopwatch->start())
echo 'stopwatch loopt nu';
//er is op stop gedrukt
if($stoptime = $stopwatch->stop())
echo 'stoptime: ' . $stoptime;
else
echo 'stopwatch loopt niet';
Gewijzigd op 31/10/2013 09:30:07 door Dirk Renes
Dat zal wel $this->stopTime moeten zijn
Ik mis ook iets, de foutmelding....
Trying to get propety of non-object on 48
trying to get propety of non object on line 48
Gewijzigd op 31/10/2013 09:39:17 door Dirk Renes
Ga eens netjes programmeren en eerst uitdenken wat je nou uberhaupt allemaal hebt opgeschreven. Er klopt niks van deze logica...
Leg zelf eens uit wat je probeert te doen.
Kijk even
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Gewijzigd op 31/10/2013 09:55:01 door Kris Peeters
@ wouter: Daarom vraag ik om hulp. Hoe dit kan verbeteren.
Dirk, nou. Begin met mij uitleggen wat elke regel van je script doet.