开发者

PHP Parse Error unexpected '{' [closed]

This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center. Closed 9 years ago.

I'm getting a "Parse error: syntax error, unexpected '{' in line 2". And I don't see the problem.

<?php
class pointLocation {
    var $pointOnVertex = true; // Check if the point sits exactly on one of the vertices

    function pointLocation() {
    }
    
    
        function pointInPolygon($point, $polygon, $pointOnVertex = true) {
        $this->pointOnVertex = $pointOnVertex;
        
        // Transform string coordinates into arrays with x and y values
        $point = $this->pointStringToCoordinates($point);
        $vertices = array(); 
        foreach ($polygon as $vertex) {
            $vertices[] = $this->pointStringToCoordinates($vertex); 
        }
        
        // Check if the point sits exactly on a vertex
        if ($this->pointOnVertex == true and $this->pointOnVertex($point, $vertices) == true) {
            return "vertex";
        }
        
        // Check if the point is inside the polygon or on the boundary
        $intersections = 0; 
        $vertices_count = count($vertices);
    
        for ($i=1; $i < $vertices_count; $i++) {
            $vertex1 = $vertices[$i-1]; 
            $vertex2 = $vertices[$i];
            if ($vertex1['y'] == $vertex2['y'] and $vertex1['y'] == $point['y'] and $point['x'] > min($vertex1['x'], $vertex2['x']) and $point['x'] < max($vertex1['x'], $vertex2['x'])) { // Check if point is on an horizontal polygon boundary
                return "boundary";
            }
            if ($point['y'] > min($vertex1['y'], $vertex2['y']) and $point['y'] <= max($vertex1['y'], $vertex2['y']) and $point['x'] <= max($vertex1['x'], $vertex2['x']) and $vertex1['y'] != $vertex2['y']) { 
                $xinters = ($point['y'] - $vertex1['y']) * ($vertex2['x'] - $vertex1['x']) / ($vertex2['y'] - $vertex1['y']) + $vertex1['x']; 
                if ($xinters == $point['x']) { // Check if point is on the polygon boundary (other than horizontal)
                    return "boundary";
                }
                if ($vertex1['x'] == $vertex2['x'] || $point['x'] <= $xinters) {
                    $intersections++; 
                }
            } 
        } 
        // If the number of edges we passed through is even, then it's in the polygon. 
        if ($intersections % 2 != 0) {
            return "inside";
        } else {
            return "outside";
        }
    }

    
    
    function pointOnVertex($point, $vertices) {
        foreach($vertices as $vertex) {
            if ($point == $vertex) {
                return true;
   开发者_高级运维         }
        }
    
    }
        
    
    function pointStringToCoordinates($pointString) {
        $coordinates = explode(" ", $pointString);
        return array("x" => $coordinates[0], "y" => $coordinates[1]);
    }
    
    
}



$pointLocation = new pointLocation();
$points = array("30 19", "0 0", "10 0", "30 20", "11 0", "0 11", "0 10", "30 22", "20 20");
$polygon = array("10 0", "20 0", "30 10", "30 20", "20 30", "10 30", "0 20", "0 10", "10 0");
foreach($points as $key => $point) {
    echo "$key ($point) is " . $pointLocation->pointInPolygon($point, $polygon) . "<br>";
}
?>

Does anyone see the problem?

Thanks,

-Laxmidi


Tested it. Runs without errors and produces the following outout:

0 (30 19) is boundary<br>1 (0 0) is outside<br>2 (10 0) is vertex<br>3 (30 20) is vertex<br>4 (11 0) is boundary<br>5 (0 11) is boundary<br>6 (0 10) is vertex<br>7 (30 22) is outside<br>8 (20 20) is inside<br>

(Mac OS x 10.6.3, PHP 5.3.1 cli)

EDIT: Maybe there cause for your error lies in some other part of your script that calls your class definition via include/require.

More info may help.


Works fine on my end, so it sounds like an encoding or EOL problem. Try these things:

  • Make sure your file is in UNIX EOL format. Each line should end with a line feed (LF)
  • Make sure you don't have a BOM (byte order mark) in your files.
  • You can try getting rid of the ?> at the end of your file. It serves no purpose. Granted, this won't really help to solve your problem, but it will make your code a little cleaner.
  • Try adding a line break after your opening <?php and after your class pointLocation {. Some versions of PHP trip up on weird whitespace.
  • Make sure your file is in something standard, like UTF-8

A good editor to make sure your file meets these criteria is Notepad++. There are lots of options and they make it dead easy. Don't use plain old Notepad, because Microsoft locks you into CRLF format (not PHP-friendly) and doesn't give you control over encoding.

Good luck!


Tested like Techpriester, runs without errors and produces the following output:

0 (30 19) is boundary<br>1 (0 0) is outside<br>2 (10 0) is vertex<br>3 (30 20) is vertex<br>4 (11 0) is boundary<br>5 (0 11) is boundary<br>6 (0 10) is vertex<br>7 (30 22) is outside<br>8 (20 20) is inside<br>

Tested on Ubuntu 9.10, Linux 2.6.31-17, PHP 5.3.2-0.dotdeb.2 (cli)

Try checking your php.ini for any auto-prepended files (auto_prepend_file) that may have that error.


As the code worked for everyone else, I tried copying and pasting the code from Stackoverflow back into my system and it worked. Weird. I must have had something screwed up with the formatting.

I still don't know what the problem was, but at least it works.

Thank you mattbasta, Techpriester, and Zack.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜