PHP: изменение атрибутов через включенную функцию - PullRequest
0 голосов
/ 17 июня 2011

Я довольно плохо знаком с классами и функциями, поэтому я работаю с простым скриптом, который встраивает видео с Youtube и локальный SWF. Это работает нормально, но я не могу изменить атрибуты $ width и $ height в SWF. Если я создаю их внутри функции, я должен установить значение «0», таким образом, не обновляясь внешним значением. Это останется как 0.

Есть два файла:

classMedia.php

<?php
/*Gabriel*/
class Media {

    public function embedYT($code){
        echo "<iframe width='560' height='349' src='http://www.youtube.com/embed/".$code." ' frameborder='0' allowfullscreen></iframe>";
        }

        public function embedSWF ($swf){
        $width='0';
        $height='0';
    echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80> 
<PARAM NAME=movie VALUE=".$swf." '> 
<EMBED src=".$swf." ' WIDTH=".$width." HEIGHT=".$height." TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'> 
</OBJECT>";
    } }
    ?>

и вывод demo.php

<?php include "classMedia.php"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php 
$media = new Media();
 $code = "XSGBVzeBUbk";
$media-> embedYT($code);
?>

<?php 
$media = new Media();
 $swf = "test.swf";
 $height = "360";
 $width = "480";
$media-> embedSWF($swf);
?>

</body>
</html>

Ответы [ 4 ]

2 голосов
/ 17 июня 2011

Если $height и $width относятся только к методу embedSWF() (и я подозреваю, что это не похоже на то, что измерения связаны с Media экземпляром , но embedSWF() вызов метода ), вы должны добавить их вместе с аргументом $swf:

public function embedSWF ($swf, $width = 0, $height = 0) {
    echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80><PARAM NAME=movie VALUE=".$swf." '><EMBED src=".$swf." ' WIDTH=".$width." HEIGHT=".$height." TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'></OBJECT>";
}

Вызывается так:

<?php 
$media = new Media();
 $swf = "test.swf";
$media-> embedSWF($swf, 480, 360);
?>

EDIT
В общем случае вы должны добавлять атрибуты в класс, когда они выражают или относятся к состоянию текущего экземпляра (объекта) . Например.,

public class Media {
    private $swf;
    private $height;
    private $width;

    public __construct($swf, $height, $width) {
        $this->swf = $swf;
        $this->height = $height;
        $this->width = $width;
    }

    public getEmbedCode() {
        // ...
    }

    public getIframeCode() {
        // ...
    }
}

В приведенном выше примере экземпляр Media имеет состояние (SWF с измерением), который может выводиться в различных форматах. То есть метод преобразует внутреннее состояние в выходной.

В качестве альтернативы, у нас есть «подобный утилите» класс без состояния. Вместо этого он содержит набор методов, которые работают исключительно с переданными данными (параметрами). Например.,

public class Media {
    public embedSWF($swf, $height, $width) {
        // ...
    }

    public embedYT($code) {
        // ...
    }
}
1 голос
/ 17 июня 2011

Вам необходимо передать значение widht и height в качестве параметров вашей функции следующим образом:

$height = "360";
$width = "480";
$media-> embedSWF($swf, width, height);

, а затем изменить свою функцию, чтобы она выглядела следующим образом

public function embedSWF ($swf, width, height)

и удалите инициацию ширины и высоты в своей функции.

Ваша ширина и высота в настоящее время находятся за пределами области видимости объектов.

1 голос
/ 17 июня 2011

Измените функцию embedSWF, добавив в нее два параметра соответственно $width и $height, например:

public function embedSWF ($swf, $width = '0', $height = '0'){
    echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80> 
            <PARAM NAME=movie VALUE=".$swf." '> 
            <EMBED src=".$swf." ' WIDTH=".$width." HEIGHT=".$height." TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'> 
        </OBJECT>";
}

Затем назовите это так:

<?php 
$media = new Media();
 $swf = "test.swf";
 $height = "360";
 $width = "480";
$media-> embedSWF($swf, $width, $height);
?>
0 голосов
/ 17 июня 2011

Замените $width и $height на атрибуты объекта следующим образом:

<?php
/*Gabriel*/
class Media {
    public $width  = 0;
    public $height = 0;

    public function embedYT($code){
        echo "<iframe width='560' height='349' src='http://www.youtube.com/embed/".$code." ' frameborder='0' allowfullscreen></iframe>";
    }

    public function embedSWF ($swf){
        echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80> 
<PARAM NAME=movie VALUE=".$swf." '> 
<EMBED src=".$swf." ' WIDTH=".$this->width." HEIGHT=".$this->height."     TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave    /download/index.cgi?P1_Prod_Version=ShockwaveFlash'> 
</OBJECT>";
    }
}
?>

Использование:

<?php 
    $media = new Media();
    $code = "XSGBVzeBUbk";
    $media-> embedYT($code);
?>

<?php 
    $media = new Media();
    $swf = "test.swf";
    $media->height = 360;
    $media->width = 480;
    $media-> embedSWF($swf);
?>
...